Особое поведение std :: string в Visual Studio?

У меня есть проект, в котором мне нужно читать / писать большие файлы.

Я решил использовать 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 и пустым в param.

Мне такое поведение кажется немного странным ...

Я тестировал только Visual Studio 2008, я не знаю, является ли это поведением стандарта STL или специфичным для MSVC.

Не могли бы вы дать мне подсказку?

6
задан genpfault 5 December 2011 в 14:54
поделиться