析构函数(Destructor)
析构函数是在对象生命周期结束时(即对象销毁时)自动调用的特殊成员函数。它的主要作用是进行资源清理,例如释放动态分配的内存,关闭文件句柄等。
析构函数的特点
- 名称:析构函数的名称是类名加
~
符号(例如~MyClass()
)。 - 没有返回类型:与构造函数类似,析构函数没有返回类型。
- 没有参数:析构函数不能带参数,因此不能重载。
- 自动调用:当对象生命周期结束时,析构函数会自动调用,通常是对象超出作用域时,或者通过
delete
关键字删除时。
示例代码:析构函数
#include <iostream>
using namespace std;
class MyClass {
private:
int* ptr;
public:
// 构造函数
MyClass(int val) {
ptr = new int(val); // 动态分配内存
cout << "Constructor called, value = " << *ptr << endl;
}
// 析构函数
~MyClass() {
delete ptr; // 释放动态分配的内存
cout << "Destructor called, memory freed" << endl;
}
};
int main() {
MyClass obj(5); // 构造函数被调用,分配内存
// obj 超出作用域时,析构函数自动调用,释放内存
return 0;
}
输出
解释
- 构造函数:当对象
obj
被创建时,构造函数分配了动态内存。 - 析构函数:当
obj
超出作用域(即程序结束时),析构函数自动被调用,释放了动态分配的内存。
3. 构造函数与析构函数的关系
- 构造函数在对象创建时被调用,负责初始化对象。
- 析构函数在对象销毁时被调用,负责清理资源。
例如,如果一个类中有动态分配的内存或文件句柄等资源,构造函数会负责分配这些资源,而析构函数则负责释放这些资源。