delete x;
和::operator delete(x);
有什么区别?我了解它们是不同的,但我无法弄清楚它们之间的区别是什么。我的特定用例是我有一个必须分配给::operator new(size_t)
的对象,然后再使用placement new运算符对其进行初始化。但是,我真的很希望能够使用delete x;
而不是::operator delete(x);
来对其进行分配,因此我想知道这两种方法(无双关语)何时可能会做不同的事情,所以我可以说何时(如果有)可以安全地互换使用。
答案 0 :(得分:4)
delete x
是delete expression
。
::operator delete(x)
是deallocation function
。
delete表达式将调用析构函数(如果存在),然后调用释放函数。直接调用释放函数将绕过析构函数。
答案 1 :(得分:2)
唯一的区别是::operator delete()
不会像delete
那样调用析构函数。