析构函数的调用

    科技2024-12-08  19

    析构函数是当对象要被释放掉时才会被调用,所以常被用来处理数据,例如释放堆区空间。

    由此,可以得出析构函数释放时的三种情况:

    1.正常情况

    例:

    #include <iostream> using namespace std; class Cstu { int a; Cstu():a(22) { cout << a << endl; a = 23; } ~Cstu() { cout << a << endl; } }; int main() { { Cstu stu; } system("pause"); return 0; }

    对象stu处于一个局部域内,当执行到22行的花括号时,执行析构函数,可用断点和控制台上输出的数值来验证。

    2.处于带返回值函数的内

    "return"相当于宣告函数已经执行结束,当执行到这一语句时,便会调用析构函数。

    可用上述例子,减去"Cstu stu"两侧的花括号去做实验。

    3.指针对象/堆区对象

    即:

    Cstu *p = new Cstu; delete p;

    因为delete的作用便是释放堆区空间,所以执行到delete时执行析构函数。

    4.临时对象

    Cstu();

    因为临时对象的作用域只是其所在的这条语句,所以当语句执行完毕前会调用析构函数。

     

    另:1.只有new 和 delete 会分别触发构造函数和析构函数,malloc 和 free无法触发。

           2.析构函数的形式只能是"~Cstu()",不能有参数,所以也无法构成重载函数。

           3.当没有写析构函数时,系统会执行默认的析构函数,其内容为空。

    Processed: 0.023, SQL: 8