析构函数问题

匚匚 2012-11-16 05:22:07
如果类中没有自定义析构函数,编译系统会为我们生成两个析构函数呢,还是一个?一个不执行任何操作的空析构函数,另一合成析构函数?
...全文
397 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jocodeoe 2012-11-18
  • 打赏
  • 举报
回复
如果类中分配了资源,一般需要定义析构函数来释放资源,系统先运行定义的析构函数,再运行合成析构函数按对象创建的逆序撤销每个非static成员。 如果类中没有分配资源,那就不需要自己定义析构函数。系统自动运行合成析构函数。 如果类中没有分配资源依然定义了一个空析构函数,系统先运行这个空析构函数(这里确实是什么都没做),然后运行合成析构函数。 综上所述:系统会运行自己生成的合成析构函数,不管你是否定义了自己的析构函数。若你定义了自己的析构函数,则先运行定义的析构函数。
yaoyaomu 2012-11-18
  • 打赏
  • 举报
回复
什么叫合成析构?~~太专业了~~求解~~
derekrose 2012-11-17
  • 打赏
  • 举报
回复
啥乱七八糟的,哪里来的俩,默认析构函数,就这个名字,只有一个
匚匚 2012-11-17
  • 打赏
  • 举报
回复
引用 3 楼 turingo 的回复:
自动生成的析构函数只有一个,这样等于放弃了自主“初始化”和“清除”的机会,大多数情况下最好自定义它。
也就是说,若没自定义系统就生成一个空析构函数,若自定义了,则系统再生成一个合成析构函数?
匚匚 2012-11-17
  • 打赏
  • 举报
回复
引用 8 楼 turingo 的回复:
永远只有一个析构函数,若自定义了,就没有自动生成的了。 引用 6 楼 zhw952 的回复:引用 3 楼 turingo 的回复:自动生成的析构函数只有一个,这样等于放弃了自主“初始化”和“清除”的机会,大多数情况下最好自定义它。 也就是说,若没自定义系统就生成一个空析构函数,若自定义了,则系统再生成一个合成析构函数?
你说的与〈c++ primer〉上的有出入:与复制构造函数或赋值操作符不同,编译器总是会为我们合成一丰析构函数,它按成员在类中声明的次序的逆序撤销成员,即使我们编写了自己的析构函数,合成析构函数仍然运行。
ww710347136 2012-11-17
  • 打赏
  • 举报
回复
默认析构函数不是什么都不做么,那个合成的是个什么意思,没听过……哪位大侠能不能解释下
似梦飞花 2012-11-17
  • 打赏
  • 举报
回复
一个,自定义之后运行自定义的
匚匚 2012-11-17
  • 打赏
  • 举报
回复
引用 12 楼 Binzo 的回复:
你理解的这个合成的大概就是大家说的什么都不做的。
不是这样的,合成的有时有重大使命
图灵狗 2012-11-17
  • 打赏
  • 举报
回复
永远只有一个析构函数,若自定义了,就没有自动生成的了。
引用 6 楼 zhw952 的回复:
引用 3 楼 turingo 的回复:自动生成的析构函数只有一个,这样等于放弃了自主“初始化”和“清除”的机会,大多数情况下最好自定义它。 也就是说,若没自定义系统就生成一个空析构函数,若自定义了,则系统再生成一个合成析构函数?
Binzo 2012-11-17
  • 打赏
  • 举报
回复
你理解的这个合成的大概就是大家说的什么都不做的。
iNemesis 2012-11-17
  • 打赏
  • 举报
回复
引用 9 楼 zzgzzg00 的回复:
一个,自定义之后运行自定义的
我记得有一个合成析构函数,好像用来逆序撤销每个非static成员。
飞天御剑流 2012-11-16
  • 打赏
  • 举报
回复
对于抽象语义,系统必定会提供一个默认析构函数,但C++标准允许一个实现在某些时候(例如所谓的trival)不实际产生析构函数,只要在效果上与抽象语义一致,这就是实现语义。
niu05500230 2012-11-16
  • 打赏
  • 举报
回复
引用 楼主 zhw952 的回复:
如果类中没有自定义析构函数,编译系统会为我们生成两个析构函数呢,还是一个?一个不执行任何操作的空析构函数,另一合成析构函数?
只会生成一个,空的,不做任何事
图灵狗 2012-11-16
  • 打赏
  • 举报
回复
自动生成的析构函数只有一个,这样等于放弃了自主“初始化”和“清除”的机会,大多数情况下最好自定义它。
匚匚 2012-11-16
  • 打赏
  • 举报
回复
引用 1 楼 Michael_g 的回复:
编译器不会给你生成所谓的析构函数,假设编译器即使生成了,那么这个析构函数做什么呢,呵呵。
你确信?c++ primer里讲,即使编写了自己的析构函数,合成的析构函数仍然运行
Michael_g 2012-11-16
  • 打赏
  • 举报
回复
编译器不会给你生成所谓的析构函数,假设编译器即使生成了,那么这个析构函数做什么呢,呵呵。
      本套C#语言教程,全部采用案例化教学模式。结合C#知识点在实际游戏中具体的应用场景,让初级学员快速、深入的学好C#语言,为进一步全面、高效的学习Unity游戏引擎,制作精良的游戏产品,打下坚实的语言基础!       真正学好Unity,其先决条件是一定要有稳固、扎实的编程基础!因此目前绝大多数(线下)Unity培训机构(一般4-5个月)都会先给学员讲解C# for Unity 的编程加强课程。(一般高校的编程课程内容少、不深入...)        本套《C# for Unity》课程共分为“入门篇”、“基础篇”、“中级篇”、“进阶篇”,分别对应于完全“零”编程基础、较少编程基础、需要强化C#编程、需要深入学习C#脚本,等各类型学员群体。      说明:  本课程使用Virtual Studio2012,以及Unity5.2 进行开发与讲解。(学员使用更高版本,对学习影响不大) 一、热更新系列(技术含量:中高级):A:《lua热更新技术中级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架(中)》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:中级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之中级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初中级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(中部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧