C++细节合成析构函数问题(synthesized destructor)

本文深入探讨了C++中合成析构函数的概念及其工作原理。解释了即使定义了自己的析构函数,编译器也会合成一个析构函数来完成对象销毁过程中的一些隐含步骤。此外,还介绍了合成析构函数与程序员定义的析构函数之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开门见山,前提知识点

析构函数体自身并不直接销毁成员,是在函数体之后隐含的析构阶段中被销毁的

 

《c++primer》第五版13章中提及的“合成析构函数”,原文中 

当1个类未定义自己的析构函数时,编译器会为它定义一个合成析构函数(synthesized destructor)。类似拷贝构造函数和拷贝赋值函数运算符,对于某些类,合成析构函数被用来阻止该类型的对象被销毁。

而csdn板块查询时,绝大部分博主重点上认为这个属于一个新名词,掺杂一些析构函数的功能便发表,我还是无法明晰何为合成析构函数。

看书中大体描述,得到下面的一些 

就算你自己定义了析构函数,系统始终会为我们合成一个析构函数,析构函数自身并不直接销毁成员是非常重要的,在整个对象销毁中,析构函数体是作为成员销毁步骤之外的另一部分而进行的。

这与其他书籍中(和既往知识)有所冲突,

部分书籍指出合成析构函数是只有在特定情况下得到

我在谷歌上查询进行翻译发现这中的synthesized destructor 是指的是destruction part(本部分由系统完成,与程序员无关)还有系统自身的一些调度和我们写的函数体相结合,我们写的析构函数依然是仅有的析构函数,析构函数是不能被重载的(没有参数),所谓的合成析构函数实则在《c++primer》中指的 是系统对程序员写的析构函数完善,没写则生成默认的析构函数(合成析构),你写了,类似我以前文章中写的new和delete文章,析构函数只是冰山露在水面上的一角,还有许多工作完成,便形成合成析构函数。

 

后来在知乎上看到《C++primer》的审校 陈梓瀚先生(轮子哥)对类似问题的解释,如释重负。

图片截取自知乎,如有侵权,立即删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值