今天看《c++ primer》的时候,突然看到合成析构函数这个名词,对析构函数了解的多点,对合成析构函数则了解的不多。
析构函数特点:
1.整个类只有一个,即不能重载;
2.没有形参;
3.没有返回值;
4.不能被继承(继承的是成员变量和成员函数,个人理解严格说这些构造函数,析构函数不能称之为“函数”,因为不符合函数定义的特征,所以构造函数,析构函数不能被继承)
5.可以手动调用(不理解为什么允许这么做)
关于这个合成析构函数,《c++ primer 第四版》这么说的:
……编译器总会 为我们合成一个析构函数……合成析构函数按对象创建时的逆序撤销每个非static成员,因此,它按成员在类中声明次序的逆序撤销成员,对于类类型的成员,合成析构函数调用该成员的析构函数来撤销对象……即使我们编写了自己的析构函数,合成析构函数依旧运行……
这里有以下几点理解:
1.合成析构函数不管你建不建析构函数他都有;
2.合成析构函数负责销毁对象本身,例如我们对象含有一个int成员时,合成析构函数可以回收这个int成员占用的空间(一个不含有成员变量的类的sizeof=1);这是合成析构函数真正做的事情;
3.我们的析构函数是对合成析构函数的扩展,所以我们常常在合成析构函数中析构堆中的资源;
4.按照合成析构函数和析构函数的分工,可以理解必然是先运行手动建立的析构函数,再运行合成析构函数;
以上是关于析构函数和合成析构函数的理解。