2013-04-12 76 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