2013-04-12 51 views
0

我试图通过使用迭代器的文本文件进行迭代:的std :: istream_iterator,内存消耗

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

它从文件中读取一些数据的第一行后(它使用操作符>>用于MyData的类型)。如预期。

不幸的是,在内存消耗上升后,似乎istream_iterator试图在内存中加载整个文件。几秒钟后(当抛出out_of_memory异常时)调试器进入第二行。但文件阅读失败,我无法阅读更多。

问题

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

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

也许对于这么大的文件我需要用普通的getline的方式吗?

回答

3

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

+0

你是对的!我将不得不调查这个>>操作符。感谢你的回答 – fen