如果我有这个:
std::ofstream empty;
for(int i = 0; i < 99999; ++i)
{
empty << "Nothing..." << std::endl;
}
这是否会导致内存不足或任何其他问题,因为流正在推送数据,但它不会去任何地方?
由于
答案 0 :(得分:3)
当文件流是默认构造时,指向内部缓冲区的6个指针初始化为nullptr
。在流上尝试的任何I / O都将失败,因为没有可用内存,并且将在流状态中设置ios_base::badbit
和ios_base::failbit
。
这是否会导致内存不足或任何其他问题,因为流正在推送数据,但它不会去任何地方?
在这种情况下,允许流抛出std::bad_alloc
。
答案 1 :(得分:1)
你弄错了。没有数据在任何地方“被推”。如果未打开流,则其上的所有输出操作都将失败,您可以轻松告诉自己:
assert(!(empty << "foo"));
答案 2 :(得分:0)
如果流未打开,则应将其视为NULL
。因此,发送到流的数据应该丢失。