C++ 删除x vs::运算符删除(x)

C++ 删除x vs::运算符删除(x),c++,C++,delete x之间的区别是什么和::运算符删除(x)?我知道它们是不同的,但我不太明白它们的区别是什么。我的特定用例是,我有一个对象,必须使用:operator new(size\u t)分配,然后使用placement new操作符初始化。然而,我真的希望能够通过deletex而不是::运算符删除(x),所以我想知道这两种方法(没有双关语)何时可以做不同的事情,这样我就可以知道何时(如果有的话)可以互换使用它们是安全的。唯一的区别是::operator delete()不会在delete会调

delete x之间的区别是什么和<代码>::运算符删除(x)?我知道它们是不同的,但我不太明白它们的区别是什么。我的特定用例是,我有一个对象,必须使用
:operator new(size\u t)
分配,然后使用placement new操作符初始化。然而,我真的希望能够通过
deletex而不是
::运算符删除(x),所以我想知道这两种方法(没有双关语)何时可以做不同的事情,这样我就可以知道何时(如果有的话)可以互换使用它们是安全的。

唯一的区别是
::operator delete()
不会在
delete
会调用析构函数的地方调用析构函数。

唯一的区别是
::operator delete()
不会在
delete
会调用析构函数的地方调用析构函数。

delete x
是一个函数

::运算符delete(x)
是一个


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

delete x
是一个简单的方法

::运算符delete(x)
是一个


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

您能介绍一下您正在谈论的内容吗?现在还不清楚你为什么这么叫新人。您似乎忽略了某个示例可能提供的上下文。“我有一个对象必须使用
:operator new(size\u t)
”-为什么不使用
new byte[]
new uint8\u t[]
new char[]
?您可以对此类内存使用
placement new
。您只需要使用
delete[]
而不是
delete
就可以了。您能展示一下您正在谈论的内容吗?现在还不清楚你为什么这么叫新人。您似乎忽略了某个示例可能提供的上下文。“我有一个对象必须使用
:operator new(size\u t)
”-为什么不使用
new byte[]
new uint8\u t[]
new char[]
?您可以对此类内存使用
placement new
。您只需使用
delete[]
而不是
delete
即可
delete x始终等同于
x.~T();::操作员删除(x)?应该是
x->~T()
,并且可能会有自定义的
运算符删除
,如果有自定义的
T
的deallocator,则最好涵盖以下内容:
::运算符删除()
删除x不同始终等同于
x.~T();::操作员删除(x)?应该是
x->~T()
,并且可能有自定义的
运算符删除
,如果有自定义的
T
的deallocator,那么
::operator delete()
就不同了