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。
广告