删除对象并在同一内存位置再次创建

时间:2013-08-02 14:07:38

标签: c++ memory new-operator

当我使用delete运算符删除某个对象,然后使用new运算符再次创建时,在同一内存位置创建对象的保证是什么?

一些例子:

Object* obj = new Object(5);
delete obj;
Object* obj = new Object(2);

4 个答案:

答案 0 :(得分:6)

  

保证同时创建对象的保证是什么   记忆的地方?

没有任何此类保证。

但是,您有时会在certian情况下看到在内存中的同一位置创建的下一个对象。特别是,在MSVC Debug构建中,您可能会经常看到这种情况。但是你应该从不依赖这种行为。当你认为它完美运作时它就会停止发生,并且它永远不会发生。

如果你确实需要在内存中的同一个地方创建一个对象,那就有一个C ++机制,称为“placement new.”但是我必须警告你 - 使用它有点棘手,因为你有首先建立缓冲区,然后在那里放置新对象,然后 在创建下一个对象之前显式调用析构函数。当你完成后,你必须销毁缓冲区。更不用说对齐问题,这使问题复杂化到另一个层面。

使用placement-new时存在许多错误和错误的机会,代码可能难以维护,而实际需要此功能的时间在正常编程中极为罕见。只要我一直在专业地做C ++,我就可以计算出我需要放置新的次数 - 一方面。

如果你不是绝对的,那么肯定知道你需要安置新的,你不需要它。

答案 1 :(得分:5)

  

在同一个内存位置创建对象的保证是什么?

完全没有。

答案 2 :(得分:1)

如果你想在内存中手动分配它,你可以使用新的,但不是很实用。以下是更多信息: C++ Pointer: changing the contents without changing the address?

答案 3 :(得分:0)

如果要在旧对象的内存空间中重新生成项目,请查看memset