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()
就不同了