C++中":: delete"的目的是什么?

Bry*_*ere 8 c++ scope-resolution delete-operator

我目前正在查看::delete用于删除指针的C++代码.

一个毫无意义的例子是:

void DoWork(ExampleClass* ptr)
{
    ::delete ptr;
}
Run Code Online (Sandbox Code Playgroud)

以这种方式使用delete关键字的目的是什么?

Bas*_*tch 11

在某些情况下,operator delete可能会重新定义 - 实际过载 - (例如,您Class可能会定义它并定义operator new).通过编码,::delete您说您正在使用标准的"预定义" 删除运算符.

一个典型的用例都重新定义operator newoperator delete一些Class:你要保持一个隐藏的全局组由创建的所有指针 Class::operator new和删除你的 Class::operator delete.但是,delete 在调用全局之前,您的实现 将从全局集中删除该指针::delete

  • 但是分配函数`ClassName :: operator new(size_t)`应该调用另一个分配函数`:: operator new(size_t)`而不使用*new-expression*.使用*new-expression*将导致构造函数多次运行.在解除分配函数中使用*delete-expression*同样会导致麻烦. (2认同)

dfr*_*fri 9

这是使用delete表达,但与可选的::前缀.

句法

::(可选) delete 表达式(1)

...

销毁先前由new表达式分配的对象并释放获得的内存区域.

使用::前缀会影响查找:

释放函数的名称在表达式指向的对象的动态类型的范围内查找,这意味着特定于类的释放函数(如果存在)在全局函数之前找到.

如果::删除表达式中存在,则此查找仅检查全局名称空间.


dor*_*ron 6

delete在C++中,运算符的方式=是相同的.因此可以重新实施.就像=,重新实现是特定于它所引用的类.添加::确保delete我们调用的运算符是全局运算符而不是特定于给定类的运算符.

当您delete为特定类重新实现然后想要引用真实类时,这可能很有用.