C ++“新”内存分配

塔120

我想为大量对象分配内存。然后一一构造它们。因此,我执行以下操作:

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;

工作正常。

所以问题是-为什么这样?

插口

首先,如果您使用展示位置,new则需要显式调用析构函数

buf[var].~BaseClass();

然后,您可以删除已分配给new的内容,尽管&buf[0]它是new布置返回的地址,但仍可以&buf[1]通过内存管理器直接分配,因此可以正常工作::operator new您不能一一释放它们。

所以你应该做类似的事情

::operator delete(buf);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章