std :: istream_iterator,内存消耗

时间:2013-04-12 10:10:06

标签: c++ stl istream-iterator

我尝试使用迭代器迭代文本文件:

1) std::istream_iterator<MyData> itRecordStreamBegin(fileStream);
2) std::istream_iterator<MyData> itRecordStreamEnd; 

在第一行之后,它从文件中读取一些数据(它使用运算符&gt;&gt;表示MyData类型)。正如所料。

不幸的是,在内存消耗上升之后,似乎istream_iterator试图将整个文件加载到内存中。几秒钟后(当抛出out_of_memory异常时)调试器进入第二行。但是文件读取失败了,我再也看不懂了。

问题

这是istream_iterator的正确行为(将文件加载到内存中)吗?

对于较小的文件(例如20MB),我没有观察到这一点。

对于这么大的文件,我需要使用常见的getline方式?

1 个答案:

答案 0 :(得分:3)

istream_iterator只在该类型上使用>>运算符。它最多保留内存中一个类型的实例。使用它时,您执行制作实例的副本。我怀疑(但没有看到代码)您的复制构造函数或析构函数有缺陷,或者您在>>运算符中的某处泄漏内存。如果问题与istream_iterator相关,我会感到非常惊讶。