析构函数是C++中的一个特殊的成员函数,它在对象生命周期结束时被自动调用,用于执行对象销毁前的清理工作。析构函数特别重要,尤其是在涉及动态分配的资源(如内存、文件句柄、网络连接等)的情况下。
基本特性
- 名称:析构函数的名称由波浪号( ~ )后跟类名构成,如 ~MyClass() 。
- 无返回值和参数:析构函数不接受任何参数,也不返回任何值。
- 自动调用:当对象的生命周期结束时(例如,一个局部对象的作用域结束,或者使用 delete 删除一个动态分配的对象),析构函数会被自动调用。
- 不可重载:每个类只能有一个析构函数。
- 继承和多态:如果一个类是多态基类,其析构函数应该是虚的。
示例
假设我们有一个类 MyClass ,它包含了动态分配的内存或其他资源
#include <iostream>
using namespace std;
class MyClass{
private:
int* datas;
public:
MyClass(int size){
datas = new int[size];
}
~MyClass(){
cout << "析构函数被调用" << endl;
delete[] datas;
}
};
int main()
{
MyClass m1(5);
MyClass *m2 = new MyClass(10);
delete m2;
return 0;
}
MyClass 的构造函数分配了一块内存,而析构函数释放了这块内存。当 obj 的生命周 期结束时(即离开了它的作用域), MyClass 的析构函数被自动调用,负责清理资源,防止内存泄露
注意
- 析构函数在对象生命周期结束时自动调用,用于清理对象可能持有的资源
- 析构函数名称由波浪线 (~) 后跟类名构成,例如 MyClass 的析构函数为 ~MyClass()
- 用于释放对象在生命周期中分配的资源,如动态内存、文件句柄、网络连接等
- 当对象离开其作用域或通过 delete 删除时,将自动调用其析构函数