C++细节合成析构函数问题(synthesized destructor)
开门见山,前提知识点
析构函数体自身并不直接销毁成员,是在函数体之后隐含的析构阶段中被销毁的
《c++primer》第五版13章中提及的“合成析构函数”,原文中
当1个类未定义自己的析构函数时,编译器会为它定义一个合成析构函数(synthesized destructor)。类似拷贝构造函数和拷贝赋值函数运算符,对于某些类,合成析构函数被用来阻止该类型的对象被销毁。
而****板块查询时,绝大部分博主重点上认为这个属于一个新名词,掺杂一些析构函数的功能便发表,我还是无法明晰何为合成析构函数。
看书中大体描述,得到下面的一些
就算你自己定义了析构函数,系统始终会为我们合成一个析构函数,析构函数自身并不直接销毁成员是非常重要的,在整个对象销毁中,析构函数体是作为成员销毁步骤之外的另一部分而进行的。
这与其他书籍中(和既往知识)有所冲突,
部分书籍指出合成析构函数是只有在特定情况下得到
我在谷歌上查询进行翻译发现这中的synthesized destructor 是指的是destruction part(本部分由系统完成,与程序员无关)还有系统自身的一些调度和我们写的函数体相结合,我们写的析构函数依然是仅有的析构函数,析构函数是不能被重载的(没有参数),所谓的合成析构函数实则在《c++primer》中指的 是系统对程序员写的析构函数完善,没写则生成默认的析构函数(合成析构),你写了,类似我以前文章中写的new和delete文章,析构函数只是冰山露在水面上的一角,还有许多工作完成,便形成合成析构函数。
后来在知乎上看到《C++primer》的审校 陈梓瀚先生(轮子哥)对类似问题的解释,如释重负。
图片截取自知乎,如有侵权,立即删除。