exit(3)表示stdio
流已刷新并关闭。但没有任何东西可以说明特定于C ++的ofstream
个对象。
标准是否保证ofstream
对象也被正确刷新和关闭,或者我是否必须以某种方式将退出条件传播到main()
并在那里执行return
以销毁所有自动流?
答案 0 :(得分:6)
std::exit()
销毁具有静态存储持续时间的对象(从而刷新此类ofstream
个对象)。它不会破坏具有自动存储持续时间的对象(使这些ofstream
个对象保持未刷新状态。)
是否刷新ofstream
取决于其存储持续时间。
答案 1 :(得分:3)
不,exit
不应该冲洗iostream。 iostream在close()
上刷新(在可用的流类型上),在流上显式调用flush
或在销毁时刷新。
在您的应用程序中使用exit
将使对象处于它们所处的状态(除非它们是静态的),因此需要清理的资源将被泄露。这不适用于内存泄漏,因为大多数操作系统会在程序退出时清理为程序本身分配的内存。
这是不建议在您的应用程序中调用exit的原因之一(除非在特殊情况下) - 您最好抛出异常而不是exit
- 。
编辑“非常特殊的情况”我指的是当您有强烈要求时的情况,例如“为了避免损害图书馆此时会调用std::exit
的加密密钥,而不允许调用用于执行任何其他操作的代码“。