-
背景:用构造函数创建对象后,程序负责追踪该对象,直到其过期为止。对象过期时,程序将自动调用一个特殊的成员函数――析构函数
-
作用:
完成清理工作,所以必须有一个析构函数
①如果构造函数使用new来分配内存,则析构函数使用delete来释放内存;
②如果构造函数没有使用new,那么析构函数无任务,此时让编译器生成一个什么都不要做的隐式析构函数就行 -
特点:
如果程序员没有提供析构函数,编译器将隐式地声明一个默认析构函数,并在发现导致对象被删除的代码后,提供默认析构函数的定义。 -
格式:
在类名前加上~;且与构造函数不同的是,析构函数从来没有参数。
如果程序员要提供,那么析构函数格式如下:
①原型格式:如一个叫Stock的类要写一个析构函数,原型如下:~Stock();
②函数格式:因为析构函数不承担任何重要的工作,因此可以将它编写为不执行任何操作的函数
Stock::~Stock() { } - 一些细节问题:
(1)什么时候应调用析构函数呢?
由编译器决定,通常不要在代码中调用
(2)创建对象的方式不同,析构函数在程序结束是怎么做的?
对存储类不了解的可以看这里 C++存储类
①如果创建的是静态存储类对象,则其析构函数将在程序结束自动被调用;
②如果创建的是自动存储类对象,则其析构函数将在程序结束时自动被调用;
③如果通过new创建对象,则它将驻留在栈内存或自由存储区中,当使用detele来释放内存,其析构函数将自动被调用。
来源:51CTO
作者:夏小树x
链接:https://blog.csdn.net/weixin_43469047/article/details/100971653