C++析构函数
格式:~类名(void){ }
没有参数,没有返回值,不能被重载,一个类只能有一个析构函数
对象销毁时自动执行
主要负责清理对象生命周期中的动态资源
#include <iostream>
using namespace std;
class A {
public:
A(int i = 0) {
m_pi = new int(i);
}
void print(void)const {
cout << *m_pi << endl;
}
~A(void) { //析构函数--对象销毁时自动调用
cout << "析构函数" << endl;
delete m_pi;
}
private:
int* m_pi;
};
int main()
{
if (1) {
A a(132);
a.print();
cout << "11111" << endl;
} //此时a对象销毁,调用了析构函数
cout << "22222" << endl;
A* b = new A(2000);
b->print();
delete b; //此时b对象销毁,调用了析构函数
cout << "333333" << endl;
return 0;
}
如果类中没有析构函数,那么编译器会提供一个析构函数
对于基本类型的成员变量,什么也不做
对于类类型的成员,将会自动调用相应类的析构函数
对象的创建和销毁顺序:
创建顺序:分配内存-->构造成员子对象-->执行构造函数
销毁顺序:执行析构函数-->析构成员子对象-->释放内存
析构函数用来销毁类中的动态资源,不能销毁对象自身
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)