C++中析构函数详解【超级详细】
·
1、析构函数的作用
主要作用:在于对象销毁前系统会自动调用,进行一些清理工作。【收回创建对象时申请的空间】
2、析构函数的格式
格式:~类名(){函数体} --- ~Person(){...}
3、析构函数的性质(与构造函数类似)
| 析构函数的性质 | |
|---|---|
| (1)析构函数无返回值也不写void,并且没有函数类型; | |
| (2)析构函数的函数名称要与类名相同; | |
| (3)析构函数没有参数列表,不可以进行函数重载;【构造函数有参数列表,并且可以进行重载】 | |
| (4)析构函数在对象销毁时会自动调用,不需要进行手动调用,并且只调用一次。 |
4、析构函数的实例
#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
class Person {
public:
//有参构造函数
Person(int a, int b, int q)
{
Age = a;
Data = b;
p = (int*)malloc(sizeof(int));
*p = q;
cout << "调用了有参构造函数!!!" << endl;
}
//用户提供的拷贝构造函数
Person(const Person& c)
{
Age = c.Age;
Data = c.Age;
p = (int*)malloc(sizeof(int));
*p = *(c.p);
cout << "调用了用户提供的拷贝构造函数!!!" << endl;
}
//析构函数
~Person()
{
free(p);
cout << "调用了析构函数!!!" << endl;
}
int Age;
int Data;
int* p;
};
int main()
{
Person a(10, 20, 30);
cout << "----------------------------" << endl;
cout << "a中p的值:" << *(a.p) << endl;
cout << "a中p的地址:" << a.p << endl;
cout << "----------------------------" << endl;
Person b = a; //使用隐式转化法调用拷贝构造函数【深拷贝】
return 0;
}
运行结果:

析构函数调用规则:先构造的后析构,后构造的先析构。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)