退出()是否刷新并关闭“流”对象

Does exit() flush and close `ofstream` objects?

本文关键字:对象 是否 刷新 退出      更新时间:2023-10-16

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

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

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

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

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

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

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

编辑:我所说的"真正例外情况"是指当您有强烈要求的情况,例如"为了避免破坏加密密钥,库将在此时调用std::exit,而不允许调用代码执行任何其他操作"。