std :: string :: clear是否会回收与字符串关联的内存?

chb*_*er0 12 c++ stl

例如,如果将一个文本文件加载到std :: string中,做了我需要做的事情,然后在其上调用clear(),这会释放保存文本的内存吗?或者我最好只是将它声明为指针,在需要时调用new,并在完成后删除它?

Die*_*ühl 15

调用std::string::clear()仅将大小设置为零.该capacity()不会改变(也不会reserve()荷兰国际集团比当前保留变化的能力存储器更少).如果你想回收为字符串分配的内存,你需要做一些事情

std::string(str).swap(str);
Run Code Online (Sandbox Code Playgroud)

复制字符串str通常只会保留合理数量的内存,并将其与str表示形式交换将安装结果表示str.显然,如果你想要字符串为空,你可以使用

std::string().swap(str);
Run Code Online (Sandbox Code Playgroud)

  • @developerbmw给它分配一个空字符串可以很容易地更改大小()而无需更改容量(),就像clear()一样。 (2认同)

Vla*_*cow 7

释放未使用内存的唯一有效方法是使用成员函数shrink_to_fit().使用swap没有任何意义,因为标准没有说使用此操作时将释放未使用的内存.

举个例子

s.clear();
s.shrink_to_fit();
Run Code Online (Sandbox Code Playgroud)

  • shrink_to_fit()"是一个非约束性请求,用于将capacity()减少为size().如果请求得到满足,则取决于实现." 因此,即使它今天释放内存,下次升级标准库时,它也可能会停止释放. (4认同)