Ano*_*ity 3 c++ destructor undefined-behavior delete-operator
auto obj = new Object;
obj->~Object();
delete obj;
Run Code Online (Sandbox Code Playgroud)
我知道这很不寻常,但它是否定义了行为?它会引起任何令人惊讶的问题吗?
如果obj使用新对象替换指向的已销毁对象,则只能执行此操作:
auto obj = new Object;
obj->~Object();
new (obj) Object();
delete obj;
Run Code Online (Sandbox Code Playgroud)
否则,您将调用未定义的行为.
你应该明白:
new调用operator new获取内存,然后调用提供的construtor来创建对象delete调用对象的析构函数,然后调用operator delete"返回"内存.编辑:正如Bo Persson指出的那样,如果你不能提供例外保证,这不是一个好主意