合成析构函数和析构函数

来源:互联网 发布:前海金融管理学院 知乎 编辑:程序博客网 时间:2024/05/21 14:04

今天看《c++ primer》的时候,突然看到合成析构函数这个名词,对析构函数了解的多点,对合成析构函数则了解的不多。

析构函数特点:

1.整个类只有一个,即不能重载;

2.没有形参;

3.没有返回值;

4.不能被继承(继承的是成员变量和成员函数,个人理解严格说这些构造函数,析构函数不能称之为“函数”,因为不符合函数定义的特征,所以构造函数,析构函数不能被继承)

5.可以手动调用(不理解为什么允许这么做)

关于这个合成析构函数,《c++ primer 第四版》这么说的:

……编译器总会 为我们合成一个析构函数……合成析构函数按对象创建时的逆序撤销每个非static成员,因此,它按成员在类中声明次序的逆序撤销成员,对于类类型的成员,合成析构函数调用该成员的析构函数来撤销对象……即使我们编写了自己的析构函数,合成析构函数依旧运行……

这里有以下几点理解:

1.合成析构函数不管你建不建析构函数他都有;

2.合成析构函数负责销毁对象本身,例如我们对象含有一个int成员时,合成析构函数可以回收这个int成员占用的空间(一个不含有成员变量的类的sizeof=1);这是合成析构函数真正做的事情;

3.我们的析构函数是对合成析构函数的扩展,所以我们常常在合成析构函数中析构堆中的资源;

4.按照合成析构函数和析构函数的分工,可以理解必然是先运行手动建立的析构函数,再运行合成析构函数;

以上是关于析构函数和合成析构函数的理解。
0 0
原创粉丝点击