相关疑难解决方法(0)

sted :: string在visual studio上的特定行为?

我有一个项目,我需要读/写大文件.

我决定使用ifstream :: read()将这些文件一次性传递到内存中,放入std :: string.(这似乎是做C++中的最快方法:http://insanecoding.blogspot.com/2011/11/how-to-read-in-file-in-c.htmlHTTP:// 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)
Run Code Online (Sandbox Code Playgroud)

但是,在Visual Studio 2008下,这并没有释放std :: string本身内部使用的内存:它的底层缓冲区没有被解除分配.

我发现删除它的唯一方法是调用std :: string :: swap(std :: string(""))强制更改实际std :: string和param中的空缓冲区之间的内部缓冲区.

我觉得这个行为有点奇怪......

我只在Visual Studio 2008上测试过,我不知道它是否是STL标准行为,或者它是否是MSVC特有的.

你能告诉我一些线索吗?

c++ stl stdstring

6
推荐指数
1
解决办法
1757
查看次数

标签 统计

c++ ×1

stdstring ×1

stl ×1