退出()是否刷新并关闭“流”对象
Does exit() flush and close `ofstream` objects?
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
,而不允许调用代码执行任何其他操作"。
相关文章:
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 在这种情况下,java对象是否可以调用本机函数
- 堆分配的对象是否存在永不为空的唯一所有者?
- QFileSystemModel 对象是否会被删除?
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 临时C++对象是否为左值?
- 为什么复制构造函数不需要检查输入对象是否指向自身?
- "this"指向的对象是否与 const 对象相同?
- 有什么方法可以检测我的类的对象是否在堆栈上创建
- 基类对象是否隐式添加到派生类中?
- 当 T 具有非平凡析构函数时,类类型 T 的对象是否可以常量初始化?
- 如何检查指针后面的对象是否有效或已删除?
- 谷神星求解器:残差函子使用的可变对象是否良好实践?还有什么其他选择
- 单一实例对象是否通过线程安全返回shared_ptr
- 对象是否保证在调用其成员函数之前被初始化
- 在另一个对象 B 中创建对象 A 时,对象 A 是否是对象 B 的本地对象,对象 A 是否会存在于对象 B 的实例化之外?
- 如何确定对象是否已分配成员
- 我们如何在c 中序列化或应对类的对象.是否有任何预定义的库
- 友元类对象是否可以在其成员函数中访问派生类对象的基类私有成员?