【C++】 --- 析构函数

简介: 【C++】 --- 析构函数

析构函数的概念

析构函数(destructor)是成员函数的一种,它的名字与类名相同,但前面要加~,没有参数和返回值。

 

一个类有且仅有一个析构函数。如果定义类时没写析构函数,则编译器生成默认析构函数。如果定义了析构函数,则编译器不生成默认析构函数。

 

析构函数在对象消亡时即自动被调用。可以定义析构函数在对象消亡前做善后工作。例如,对象如果在生存期间用 new 运算符动态分配了内存,则在各处写 delete 语句以确保程序的每条执行路径都能释放这片内存是比较麻烦的事情。有了析构函数,只要在析构函数中调用 delete 语句,就能确保对象运行中用 new 运算符分配的空间在对象消亡时被释放。

 

只要对象消亡,就会引发析构函数的调用。下面的程序说明了析构函数起作用的一些情况。

1. #include<iostream>
2. using namespace std;
3. class CDemo {
4. public:
5.     ~CDemo() {  //析构函数
6.         cout << "Destructor called"<<endl;
7.     }
8. };
9. 
10. int main() {
11.     CDemo array[2];  //构造函数调用2次
12.     CDemo* pTest = new CDemo;  //构造函数调用
13. delete pTest;  //析构函数调用
14.     cout << "-----------------------" << endl;
15.     pTest = new CDemo[2];  //构造函数调用2次
16. delete[] pTest;  //析构函数调用2次
17.     cout << "Main ends." << endl;
18. return 0;
19. }

程序的输出结果是:

Destructor called

-----------------------

Destructor called

Destructor called

Main ends.

Destructor called

Destructor called


第一次析构函数调用发生在第 13 行,delete 语句使得第 12 行动态分配的 CDemo 对象消亡。


接下来的两次析构函数调用发生在第 16 行,delete 语句释放了第 15 行动态分配的数组,那个数组中有两个 CDemo 对象消亡。最后两次析构函数调用发生在 main 函数结束时,因第 11 行的局部数组变量 array 中的两个元素消亡而引发。

相关文章
|
3月前
|
C++ 容器
【C++】拷贝构造函数、拷贝赋值函数与析构函数
【C++】拷贝构造函数、拷贝赋值函数与析构函数
92 6
|
3月前
|
安全 编译器 C++
C++一分钟之-构造函数与析构函数
【6月更文挑战第20天】C++中的构造函数初始化对象,析构函数负责资源清理。构造函数有默认、参数化和拷贝形式,需注意异常安全和成员初始化。析构确保资源释放,避免内存泄漏,要防止重复析构。示例代码展示了不同构造函数和析构函数的调用情况。掌握构造和析构是有效管理对象生命周期和资源的关键。
36 2
|
4月前
|
C++ Linux
|
3月前
|
存储 编译器 C语言
【C++】类和对象②(类的默认成员函数:构造函数 | 析构函数)
C++类的六大默认成员函数包括构造函数、析构函数、拷贝构造、赋值运算符、取地址重载及const取址。构造函数用于对象初始化,无返回值,名称与类名相同,可重载。若未定义,编译器提供默认无参构造。析构函数负责对象销毁,名字前加`~`,无参数无返回,自动调用以释放资源。一个类只有一个析构函数。两者确保对象生命周期中正确初始化和清理。
|
3月前
|
编译器 C语言 C++
【C++】:构造函数和析构函数
【C++】:构造函数和析构函数
36 0
|
4月前
|
编译器 C++
C++程序中的派生类析构函数
C++程序中的派生类析构函数
23 2
|
4月前
|
C++
C++程序中的析构函数
C++程序中的析构函数
28 2
|
4月前
|
编译器 C++
【C++从练气到飞升】03---构造函数和析构函数
【C++从练气到飞升】03---构造函数和析构函数
|
3月前
|
编译器 C++
C++进阶之路:何为默认构造函数与析构函数(类与对象_中篇)
C++进阶之路:何为默认构造函数与析构函数(类与对象_中篇)
25 0
|
4月前
|
编译器 C++
【C++类和对象】构造函数与析构函数
【C++类和对象】构造函数与析构函数
【C++类和对象】构造函数与析构函数