nit*_*ian 1 c++ dictionary stl
如果map在函数内部声明了STL ,是否需要在函数退出之前清除映射?如果没有清除,是否会导致内存泄漏?
不需要.标准容器在销毁之前不需要清除,因为资源会自动释放.
但请注意,如果您的std::map或std::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)
没有泄漏记忆.
所有这一切总结为; 总是使用容器或智能指针; 如果你真的需要,只使用原始指针指向的动态分配对象.