例如我有字符串的静态声明
std::string s("test");
内存将为字符串动态分配。当字符串s
超出范围时,分配给字符串的内存将被释放?
的情况下std::map
std::map <std::string, std::string> testMap;
同样,如果这testMap
也超出范围,std::string
则调用析构函数并且字符串的内存将被释放?
注释 ?提前致谢 :)
如果您谈论的是在内部进行的动态分配std::string
,那么是的,它将被自动释放。
如果您new
用于分配实际std::string
,那么您需要在delete
之后使用。
使用标准 C+ 容器时,所有分配的内存都会自动释放。你不必担心这样做。
除了已经发布的答案之外,我还必须注意到std::string
并且std::map
(以及其他容器)使用分配器进行内存管理。特别是这意味着deallocate()
他们将内存返回给分配器后,而不是直接返回给系统,并且分配器(或STL实现)取决于它是否返回给系统。因为调用系统内存管理(如malloc()
)可能足够重,一些分配器不返回内存,所以allocate()
如果存在一些预分配的块,下一次调用会快得多。有时它可能会导致各种工具检测到虚假的内存泄漏。