一、何时需要编写析构函数
许多类不需要显式地编写析构函数,尤其是具有构造函数的类不一定需要定义自己的析构函数。析构函数通常用于释放在构造函数或在对象生命期内获取的资源(如动态分配的内存)。
但是,析构函数的作用并不仅限于释放资源方面,它可以包含任意操作,用来执行“对象即将被撤销之前程序员所期待的任何操作” 。
如果类需要析构函数,则该类几乎必然需要定义自己的复制构造函数和赋值运算符重载,这个规则称为析构函数三法则(rule of three)。
二、构造函数和析构函数的调用次序
构造函数和析构函数的调用很像一个栈的先进后出,调用析构函数的次序正好与调用构造函数的次序相反。最先被调用的构造函数,其对应的(同一对象中的)析构函数最后被调用,而最后被调用的构造函数,其对应的析构函数最先被调用。