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;
}

 

复制代码

如果类中没有析构函数,那么编译器会提供一个析构函数

对于基本类型的成员变量,什么也不做

对于类类型的成员,将会自动调用相应类的析构函数

 

对象的创建和销毁顺序:

创建顺序:分配内存-->构造成员子对象-->执行构造函数

销毁顺序:执行析构函数-->析构成员子对象-->释放内存

 

 

析构函数用来销毁类中的动态资源,不能销毁对象自身

 

 

 

 

posted @   天子骄龙  阅读(529)  评论(0编辑  收藏  举报
编辑推荐:
· 基于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)
点击右上角即可分享
微信分享提示

目录导航