C++ 中的析构函数


析构函数是 C++ 中类的函数,用于删除类对象。

调用析构函数

当类对象在程序中超出作用域时,会调用析构函数。对象超出作用域的情况包括:

  • 程序超出函数的作用域。

  • 程序结束。

  • 初始化对象局部变量的代码块超出作用域。

  • 当对象的运算符被删除时。

示例

让我们看一段代码并猜测程序的输出:

 在线演示

#include <iostream>
using namespace std;
int i;
class destructor {
   public:
      ~destructor(){
         i=10;
      }
};
int valueInitializer() {
   i=3;
   destructor d1;
   return i;
}
int main() {
   cout<"i = "<<valueInitializer()<<endl;
      return 0;
}

输出

i = 3

让我们先了解一下代码,这里我们创建了一个全局变量 I,然后在值初始化函数中我们改变了它的值。在这里,我们将其初始化为值 3,然后创建对象 d1,最后返回该值。

猜猜输出是什么?

是 3,如果你猜对了,恭喜你!如果你认为是 10,也不要担心。现在,看看这里发生了什么:

如上所述,当调用函数超出作用域时,会调用析构函数。在超出作用域之前,函数已将值 3 返回。

示例

再试一次,现在猜猜这段代码的输出:

 在线演示

#include <iostream>
using namespace std;
int i;
class destructor {
   public:
      ~destructor(){
         i=10;
      }
};
int& valueInitializer() {
   i=3;
   destructor d1;
   return i;
}
int main() {
   cout<<"i = "<<valueInitializer()<<endl;
   return 0;
}

输出

这段代码看起来很相似,但它

输出:i = 10

为什么?

在这里,我们返回了变量的引用而不是值。因此,当调用析构函数时,它会将值更改为 10,并且由于传递了引用,因此打印 10。

更新于: 2020年4月17日

839 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告