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)
在同一个内存位置创建对象的保证是什么?
没有任何此类保证.
但是,您有时会在certian情况下看到在内存中的同一位置创建的下一个对象.特别是,在MSVC Debug构建中,您可能会经常看到这种情况.但你永远不应该依赖这种行为.当你认为它完美运行时它就会停止发生,并且它永远不会发生.
如果你确实需要在内存中的相同位置创建一个对象,那么有一个C++机制,称为" placement new".但是我必须警告你 - 使用它有点棘手,因为你必须先建立一个缓冲区然后在那里放置新对象,然后在创建下一个对象之前显式调用析构函数.当你完成后,你必须销毁缓冲区.更不用说对齐问题,这使问题复杂化到另一个层面.
使用placement-new时,存在许多错误和错误的机会,代码可能难以维护,而实际需要此功能的时间在正常编程中极为罕见.只要我一直在专业地做C++,我就可以计算出我需要放置新的次数 - 一方面.
如果你不是绝对的,那么肯定知道你需要新的位置,你不需要它.