std:map 析构函数是否调用键析构函数以及值析构函数?

Does std:map Destructor call Key Destructors as well as Value Destructors?

本文关键字:析构函数 调用 map 是否 std      更新时间:2023-10-16

例如,以下是否泄漏?

Foo ( )
{
   std:map<std:string, int> myMap;
   myMap[std::string("Bar")] = 2983;
}

我相信它不会泄漏,但找不到有关这一点的具体文档。

是的,映射析构函数map::~map()将为其管理的每个键和值调用析构函数并释放内存。

§ 23.2.1 表96——集装箱所需经费(续)

(&a)->X() void 
the destructor is applied to every element of a; all the memory is deallocated.

是的,确实如此。 这在C++中是非常标准的东西,基本上标准库和 STL 中的所有内容都是这样工作的——除非你存储原始指针,否则总是调用析构函数。

您没有使用 new 动态分配任何内存。所有变量都在堆栈上分配。我在这里看不到任何内存泄漏。