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

bre*_*ett 4 c++

如果您查看此链接http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=107, 则写入:

"例如,abort()和exit()库函数永远不会在面向对象的环境中使用 - 即使在调试期间 - 因为它们在程序终止之前不会调用对象的析构函数."

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

Jar*_*Par 9

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

话虽如此,任何依赖这些类型的行动的计划都存在根本缺陷.使用退出和中止不是避免析构函数的唯一方法.还有许多其他方法可以绕过析构函数.例如,用户强制终止进程或停电.

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

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