当我使用delete
运算符删除某个对象,然后使用new
运算符再次创建时,在同一内存位置创建对象的保证是什么?
一些例子:
Object* obj = new Object(5);
delete obj;
Object* obj = new Object(2);
答案 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
。