0

例如我有字符串的静态声明

std::string s("test");

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

的情况下std::map

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

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

注释 ?提前致谢 :)

4

3 回答 3

5

如果您谈论的是在内部进行的动态分配std::string,那么是的,它将被自动释放。

如果您new用于分配实际std::string,那么您需要在delete之后使用。

于 2012-12-14T06:07:24.423 回答
2

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

于 2012-12-14T06:07:08.740 回答
1

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

于 2012-12-14T06:18:55.210 回答