c++ - std::istream_iterator,内存消耗

标签 c++ stl 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 方式?

最佳答案

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

关于c++ - std::istream_iterator,内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15968621/

相关文章:

android - ndk 构建错误 : 'string' in namespace 'std' does not name a type

c++ - C++中istream_iterator的奇怪结果

c++ - 如何在 C++ 中打印成员函数地址

c++ - 浮点提升 : stroustrup vs compiler - who is right?

c++ - 为什么在传递字符串作为文件名而不是 char* 时会出现错误?

c++ - istream_iterators 之间的距离

c++ - 如何使用 std::copy 读取任意数量的值?

c++ - 为什么在 Lua 中添加到表时推送重复的键?

c++ - 如何强制我的 std::map 释放使用的内存?

c++ - 迭代器和反向迭代器的区别