在固定的内存地址 执行构造函数

benjiam 2008-03-12 10:53:58
如果是一个struct 很简单, 我们可以随便new 一个sizeof(struct a) 的内存, 然后 直接memset 0 , 然后赋值。

最后将这个内存地址传来传去 ,最后delete [] 就好了。

但是假设, 我希望在我一个new 出来 sizeof(class(a))*100 的地方放10个class a 应该怎么做?

a:a(ptr, x,x,x,); 我看到primer 里面的伪代码是这么些的
而且a 内存可能还有其他的new 操作。 如何做事正道?
...全文
177 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2008-03-13
  • 打赏
  • 举报
回复
3楼已给答案。
benjiam 2008-03-13
  • 打赏
  • 举报
回复
我想我描述错误了。 我的意思 是如何显式的调用 构造和 析构函数。

因为内存块我已经new 出来了。

使用这种做法更多情况下,不是为了程序设计,而是因为其他的原因。
fish6344 2008-03-13
  • 打赏
  • 举报
回复
3楼回答正确,正是你问题的解。但楼主的这种想法,在编程实践中应尽可能少用,应为它增加了代码的复杂度以及伴随而来的安全性等等。事实上就楼主的需求而言,有更好的选择,例如:

//假定已有你的a的定义:
vector<a> _va;

利用它及其迭代器,完全能够满足你可能的需求,而且安全、方便和高效!
Chappell 2008-03-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 benjiam 的回复:]
哦 删除是否用_ph = delete(_ph) a;
[/Quote]
这个取决于你100个对象是怎么来的。如果是在栈中申请的话,则不用delete,但是要显示调用析构函数。
int main(int argc, char* argv[])
{
int l[10];
X* x= new(l) X(47);
x->X::~X();
return 0;
}
benjiam 2008-03-12
  • 打赏
  • 举报
回复
哦 删除是否用_ph = delete(_ph) a;

fish6344 2008-03-12
  • 打赏
  • 举报
回复
  当然是使用'Placement Operator new'语意,例如,假设你的上述new 出来 sizeof(class(a))*100 的首地址是指针_ph,则:

_ph = new(_ph) a;//在首地址上构建了1个a!

  在你想放置a的内存地址使用如上语句.当然你必需妥善管理好它们,不要造成a们地址重叠,还要在适当的时机记住delete掉那些a......

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧