当函数退出时,是否需要清除函数内部声明的STL'map'吗?

nit*_*ian 1 c++ dictionary stl

如果map在函数内部声明了STL ,是否需要在函数退出之前清除映射?如果没有清除,是否会导致内存泄漏?

650*_*502 6

不需要.标准容器在销毁之前不需要清除,因为资源会自动释放.

但请注意,如果您的std::mapstd::vector包含动态分配内存的原始指针,则必须注意此内存.

换句话说,原始指针的销毁不会释放指向的内存,因此代码如下:

void foo() {
    std::map<std::string, int *> mymap;
    mymap["mykey"] = new int[100];
    ...
}
Run Code Online (Sandbox Code Playgroud)

不会泄漏密钥,但它会泄漏动态分配的100个整数.

如果地图包含其他容器,那么一切都会好的; 例如:

void foo() {
    std::map<std::string, std::vector<int> > mymap;
    mymap["mykey"].resize(100);
    ...
}
Run Code Online (Sandbox Code Playgroud)

没有泄漏记忆.

所有这一切总结为; 总是使用容器或智能指针; 如果你真的需要,只使用原始指针指向的动态分配对象.