exit()是否刷新并关闭`ofstream`对象?

时间:2013-12-26 12:14:23

标签: c++ exit

exit(3)表示stdio流已刷新并关闭。但没有任何东西可以说明特定于C ++的ofstream个对象。

标准是否保证ofstream对象也被正确刷新和关闭,或者我是否必须以某种方式将退出条件传播到main()并在那里执行return以销毁所有自动流?

2 个答案:

答案 0 :(得分:6)

std::exit()销毁具有静态存储持续时间的对象(从而刷新此类ofstream个对象)。它不会破坏具有自动存储持续时间的对象(使这些ofstream个对象保持未刷新状态。)

是否刷新ofstream取决于其存储持续时间。

答案 1 :(得分:3)

不,exit不应该冲洗iostream。 iostream在close()上刷新(在可用的流类型上),在流上显式调用flush或在销毁时刷新。

在您的应用程序中使用exit将使对象处于它们所处的状态(除非它们是静态的),因此需要清理的资源将被泄露。这不适用于内存泄漏,因为大多数操作系统会在程序退出时清理为程序本身分配的内存。

这是不建议在您的应用程序中调用exit的原因之一(除非在特殊情况下) - 您最好抛出异常而不是exit - 。

编辑“非常特殊的情况”我指的是当您有强烈要求时的情况,例如“为了避免损害图书馆此时会调用std::exit的加密密钥,而不允许调用用于执行任何其他操作的代码“。