前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >11.7 C++析构函数

11.7 C++析构函数

原创
作者头像
小林C语言
修改2021-06-04 10:21:12
3K0
修改2021-06-04 10:21:12
举报
文章被收录于专栏:C语言入门到精通

C++析构函数概述

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

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

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

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

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

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

C++析构函数详解

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

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

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

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

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

代码语言:javascript
复制
#include <iostream>
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() <<endl;
   return 0;
}

编译运行结果:

代码语言:javascript
复制
我是构造函数
学号是:6
我是析构函数

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

以上,如果你看了觉得对你有所帮助,就给小林点个赞叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~

100道C语言源码案例请去公众号:C语言入门到精通

C++学习路线    C++开发工具

VC6.0、Devc++、VS2019使用教程

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档