gpt4 book ai didi

c++ - 为什么在程序终止时调用析构函数很重要?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:21:09 29 4
gpt4 key购买 nike

如果您查看此链接 http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=107是这样写的:

"For example, the abort() and exit() library functions are never to be used in an object-oriented environment—even during debugging—because they don't invoke objects' destructors before program termination."

为什么调用exit的时候还要调用析构函数? (因为操作系统保证只要程序退出就会回收内存,对吧?)

最佳答案

除了释放内存和/或资源之外,析构函数还可以并且经常执行其他操作。它们通常用于做出某些其他保证,例如将用户数据写入文件或非进程特定资源处于已知状态。操作系统不会在退出时执行这些类型的操作。

话虽如此,任何依赖这些类型操作的程序都存在根本性缺陷。使用 exit 和 abort 并不是避免析构函数的唯一方法。有许多其他方法可以规避析构函数。例如用户强制终止进程或断电。

我绝对不同意在引用的段落中使用never。我至少可以想到一种绝对不希望析构函数执行的情况:损坏的内存。在您检测到损坏的内存时,您无法再对进程中的代码做出任何保证,包括析构函数。应该将数据写入文件的代码可能会删除/损坏它。

当检测到内存损坏时,唯一安全的做法是尽快退出进程。

关于c++ - 为什么在程序终止时调用析构函数很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3641191/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com