写入未打开的流是否有后果

Are there consequences to writing to an unopened stream?

本文关键字:是否 后果      更新时间:2023-10-16

如果我有这个:

std::ofstream empty;
for(int i = 0; i < 99999; ++i)
{
   empty << "Nothing..." << std::endl;
}

这是否会导致内存不足异常或任何其他问题,因为流正在推送数据但不会去任何地方?

谢谢

当文件流默认构造时,指向内部缓冲区的 6 个指针将初始化为 nullptr 。流上尝试的任何 I/O 都将失败,因为没有可用内存,并且ios_base::badbitios_base::failbit将设置为流状态。

这是否会导致内存不足异常或任何其他问题,因为流正在推送数据但不会去任何地方?

在这种情况下,允许流抛出std::bad_alloc

你弄错了。没有数据在任何地方"被推送"。如果未打开流,则其上的所有输出操作都将失败,因为您可以轻松地告诉自己:

assert(!(empty << "foo"));

如果流未打开,则应将其视为NULL。 因此,发送到流的数据应该丢失。