写入未打开的流有后果吗?

时间:2013-12-19 23:33:40

标签: c++ stl

如果我有这个:

std::ofstream empty;

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

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

由于

3 个答案:

答案 0 :(得分:3)

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

  

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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