这是我的程序:
#include <fstream>
int main() {
std::ofstream fout("data.dat", std::ios::binary);
for (int isam=0; isam<500; isam++) fout.write((char*) &isam, 4);
exit(1);
}
当我在 MacBook 上运行此文件时,文件 data.dat 的长度为 1 个字节(在 AWS 上为 0 个字节),而不是 2000。如果我增加 500,我最终会得到更多的字节,但永远不会达到预期的数量。但是,当我注释掉 exit() 时,无论字节数如何,一切都会按预期工作。这就好像 exit() 停止了前一行代码的缓冲输出。这不是一个bug吗?谢谢
根据这个:
那么,您的堆栈未展开:不调用具有自动存储持续时间的变量的析构函数。
std::ofstream
永远不会被破坏,这意味着它的缓冲区没有关闭,因此它仍然包含的任何内容(并且尚未刷新到磁盘)都会丢失。所以,不,这不是一个错误。它完全按照设计工作。