删除 x 与 ::运算符删除 (x)

delete x vs ::operator delete(x)

本文关键字:删除 运算符      更新时间:2023-10-16

delete x;::operator delete(x);有什么区别?我知道它们是不同的,但我无法弄清楚有什么区别。我的具体用例是,我有一个对象,必须使用::operator new(size_t)分配,然后使用 place new 运算符进行初始化。但是,我真的很希望能够用delete x;而不是::operator delete(x);来释放它,所以我想知道这两种方法(没有双关语(何时可能会做不同的事情,所以我可以判断何时(如果有的话(可以安全地互换使用它们。

delete x是一个delete expression

::operator delete(x)是一个deallocation function.

删除表达式将调用析构函数(如果存在(,然后调用释放函数。直接调用释放函数将绕过析构函数。

唯一的区别是::operator delete()不会像delete那样调用析构函数。