在C ++中释放在std :: string中分配的内存

时间:2012-12-14 06:04:26

标签: c++ memory

例如,我有字符串

的静态声明
std::string s("test");

将为字符串动态分配内存。当字符串s超出范围时 分配给字符串的内存将被解除分配?

如果是std::map

std::map <std::string, std::string> testMap;

同样,如果此testMap也超出范围,则调用std::string的析构函数并释放字符串的内存?

评论? 在此先感谢:)

3 个答案:

答案 0 :(得分:5)

如果您正在讨论std::string 内的动态分配,那么是的,它会自动解除分配。

如果您使用new分配实际std::string,则之后需要使用delete

答案 1 :(得分:2)

使用标准C +容器时,将自动释放所有已分配的内存。你不必担心这样做。

答案 2 :(得分:1)

除了已发布的答案之外,我还要注意std::stringstd::map(以及其他容器)使用 allocators 进行内存管理。特别是这意味着在deallocate()之后它们将内存返回到分配器,而不是直接返回到 system ,并且它是依赖于分配器(或STL实现)将是否返回到系统。由于调用系统内存管理(如malloc())可能足够重,某些分配器不会返回内存,因此如果存在一些预分配的块,则下一次调用allocate()将会快得多。有时它可能会导致各种工具检测到虚假的内存泄漏。