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

Tom*_*Tom 4 c++ memory new-operator

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

一些例子:

Object* obj = new Object(5);
delete obj;
Object* obj = new Object(2);
Run Code Online (Sandbox Code Playgroud)

Joh*_*ing 6

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

没有任何此类保证.

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

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

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

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


R. *_*des 5

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

一个都没有.

  • 我今天看到的最简单,最准确的答案! (2认同)