11.7 C++析构函数

Posted 小林C语言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了11.7 C++析构函数相关的知识,希望对你有一定的参考价值。

C++析构函数概述

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

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

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

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

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

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

C++析构函数详解

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

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

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

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

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

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

编译运行结果

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

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

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

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

以上是关于11.7 C++析构函数的主要内容,如果未能解决你的问题,请参考以下文章

11.7 C++析构函数

c++析构函数需要异常处理吗?如需要实现有何要求?

为啥C++里面,析构函数会被调用两次

C++虚函数表与虚析构函数

C++ 类设计总结回顾------析构函数

c++ 复制构造函数和析构函数