【发布时间】:2013-12-05 21:06:42
【问题描述】:
我想为大量对象分配内存。然后一个一个地构造它们。所以我做了以下事情:
BaseClass* buf = static_cast<BaseClass*> (::operator new (sizeof(BaseClass[5])));
for (int var = 0; var < 5; ++var) {
new (&buf[var]) BaseClass(var);
}
一切似乎都很好。但是当我添加删除时:
BaseClass* buf = static_cast<BaseClass*> (::operator new (sizeof(BaseClass[5])));
for (int var = 0; var < 5; ++var) {
new (&buf[var]) BaseClass(var);
// ... do something
delete &buf[var];
}
我收到“分段错误”错误。在第二次迭代(在构造函数上)。 同时
delete [] buf;
工作正常。
所以问题是 - 为什么会这样?
【问题讨论】:
-
最好以较小的批量分配动态内存。你的记忆越碎片化,你的新记忆失败的机会就越大。
-
你为什么不直接使用
std::vector<BaseClass>?
标签: c++ memory-management new-operator