【C++学习笔记】:析构函数
创始人
2025-05-28 02:04:15
0

C++析构函数概述

C++析构函数是一个特殊的成员函数,作用与构造函数相反,它的名字是类名的前面加一个~符号,析构函数是与构造函数作用相反的函数,当对象的生命期结束时,会自动执行析构函数。

C++执行析构函数的情况

如果在一个函数中定义了一个对象,当这个函数被调用结束时,对象应该释放,在对象释放前自动执行析构函数。

static局部对象在函数调用结束时对象并不释放,因此也不调用析构函数,只在main函数结束调用exitt函数结束程序时,才调用static局部对象的析构函数。

如果定义了一个全局对象,则在程序的流程离开其作用域时,调用该全局对象的析构函数。

如果用new运算符动态地建立了一个对象,当用delete运算符释放该对象时,先调用该对象的析构函数。 

C++析构函数详解

析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作,使这部分内存可以被程序分配给新对象使用。

析构函数不返回任何值,没有函数类型,也没有函数参数,因此不能重载,一个类可以有多个构造函数,但只能有一个析构函数。 

析构函数的作用并不仅限于释放资源方面,它还可以被用来执行程序员希望在最后一次使用对象之后所执行的任何操作。

如果没有定义析构函数,C++编译系统会自动生成一个析构函数,但它只是徒有析构函数的名称和形式,实际上什么都不执行,要想让析构函数执行,必须在定义的析构函数中指定。

案例:C++析构函数案例

#include 
using namespace std;
class Number
{
   public:
      void setNumber( double num );
      double getNumber( void );
      Number(); // 这是构造函数声明
      ~Number(); // 这是析构函数声明
   private:
      float number;
};
// 成员函数定义,包括构造函数
Number::Number(void)
{
    cout << "我是构造函数" << endl;
}
Number::~Number(void)
{
    cout << "我是析构函数" << endl;
}
 
void Number::setNumber( double num )
{
    number = num;
}
 
double Number::getNumber( void )
{
    return number;
}
// 程序的主函数
int main( )
{
   Number num;
   num.setNumber(6.0); // 设置长度
   cout << "学号是:" << num.getNumber() <    return 0;
}

编译运行结果:

我是构造函数
学号是:6
我是析构函数

--------------------------------
Process exited after 2.047 seconds with return value 0
请按任意键继续. . .

相关内容

热门资讯

中证A500ETF摩根(560... 8月22日,截止午间收盘,中证A500ETF摩根(560530)涨1.19%,报1.106元,成交额...
A500ETF易方达(1593... 8月22日,截止午间收盘,A500ETF易方达(159361)涨1.28%,报1.104元,成交额1...
何小鹏斥资约2.5亿港元增持小... 每经记者|孙磊    每经编辑|裴健如 8月21日晚间,小鹏汽车发布公告称,公司联...
中证500ETF基金(1593... 8月22日,截止午间收盘,中证500ETF基金(159337)涨0.94%,报1.509元,成交额2...
中证A500ETF华安(159... 8月22日,截止午间收盘,中证A500ETF华安(159359)涨1.15%,报1.139元,成交额...
科创AIETF(588790)... 8月22日,截止午间收盘,科创AIETF(588790)涨4.83%,报0.760元,成交额6.98...
创业板50ETF嘉实(1593... 8月22日,截止午间收盘,创业板50ETF嘉实(159373)涨2.61%,报1.296元,成交额1...
港股异动丨航空股大幅走低 中国... 港股航空股大幅下跌,其中,中国国航跌近7%表现最弱,中国东方航空跌近5%,中国南方航空跌超3%,美兰...
电网设备ETF(159326)... 8月22日,截止午间收盘,电网设备ETF(159326)跌0.25%,报1.198元,成交额409....
红利ETF国企(530880)... 8月22日,截止午间收盘,红利ETF国企(530880)跌0.67%,报1.034元,成交额29.0...