C++关键字-delete
delete关键字和new关键字类似,主要有以下用法:
- delete表达式
- operator delete
- 禁用函数
delete表达式
delete ptr
- 调用ptr所指向对象的析构函数。
- 调用operator delete()函数来释放ptr所指向的内存。
delete[] ptr
- 编译器读取ptr数组的长度。
- 从最后一个元素开始,逐一调用所有元素的析构函数。
- 调用operator delete[]()函数来释放整个内存块。
operator delete
operator delete全局函数是delete表达式背后的函数。它主要负责释放内存。
operator delete的版本非常多,详解链接
这里列出最基本的版本:
void operator delete (void* ptr ) throw();
void operator delete (void* ptr ) noexcept;
void operator delete[](void* ptr ) throw();
void operator delete[](void* ptr ) noexcept;
operator delete函数与operator new函数一样,也支持重载,也分为全局重载和类内重载。
禁用函数
禁用构造函数或赋值运算符
class Foo {
public:
    // ...
    Foo(const Foo&) = delete;
    Foo& operator=(const Foo&) = delete;
};
禁用特定类型的重载
class Foo {
public:
    void process(double d) { /*...*/ }
    void process(int i) = delete;
};
int main()
{
    Foo f;
    f.process(3.14); // OK
    f.process(10);   // 编译错误!该函数已被禁用
}