我有一個需要讀/寫大文件的項目。在visual studio上的std :: string的具體行爲?
我決定使用ifstream :: read()將這些文件放入內存中,一次傳遞到std :: string中。 (這似乎是做在C最快的方式++:http://insanecoding.blogspot.com/2011/11/how-to-read-in-file-in-c.html和 http://insanecoding.blogspot.com/2011/11/reading-in-entire-file-at-once-in-c.html)
當文件之間切換,然後我需要「重啓」用作先前內存緩衝區的std :: string(即刪除的char []緩衝區以釋放內存)
我想:
std::string::clear()
std::string::assign("")
std::string::erase(0, std::string::npos)
std::string::resize(0)
std::string::reserve(0)
但是,Visual Studio 2008的下,這不會釋放的std :: string本身內部使用的內存:它的基礎緩衝區沒有被分配。
我發現刪除它的唯一方法是調用std :: string :: swap(std :: string(「」)) 強制更改實際std :: string和空的std :: string之間的內部緩衝區在參數。
我覺得這種行爲有點怪......
我只在Visual Studio 2008中測試過,我不知道這是否是一個STL標準的行爲,或者如果它是MSVC特有的。
你能給我一些線索嗎?
交換是一種使容器釋放保留內存的標準方式。使用'std :: string'讀取文件的方式與最佳方式不同。 – 2011-12-05 14:22:08
@ VladLazarenko:標準,可能最快。 – Nawaz
爲什麼**你會希望任何人釋放緩衝區? C++ 11增加了明確的'shrink_to_fit()'來做一個非約束請求來解除分配。 –