析构函数与合成析构函数

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

析构函数特点:

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

2.没有形参;

3.没有返回值;

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

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

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

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

这里有以下几点理解:

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

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

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

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

以上是关于析构函数和合成析构函数的理解。

引用\[2\]中提到,可以使用default关键字来生成默认的析构函数。默认析构函数会在对象销毁时自动调用,用于释放对象所占用的资源。默认析构函数的生成规则是,如果类中没有显式定义析构函数编译器会自动生成一个默认的析构函数。这个默认的析构函数会依次调用类中所有非静态成员的析构函数。使用default关键字可以显式地声明默认析构函数,使其成为内联函数并由编译器默认生成。如果不希望合成内联函数,则可以在类外定义处使用default关键字。总之,使用default关键字可以方便地生成默认的析构函数。\[2\] #### 引用[.reference_title] - *1* *3* [《C++语言程序设计》 类与对象(二)(析构函数,移动构造函数,default,delete函数)](https://blog.csdn.net/m0_74575799/article/details/130016287)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [c++ 理解 关于构造函数和析构函数](https://blog.csdn.net/weixin_43598042/article/details/125316549)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值