gpt4 book ai didi

c++ - 函数退出时是否需要清除函数内部声明的STL 'map'?

转载 作者:太空宇宙 更新时间:2023-11-03 10:27:14 25 4
gpt4 key购买 nike

如果STL map 是在函数内部局部声明的,是否有必要在函数退出之前清除映射?如果不清除,会不会造成内存泄漏?

最佳答案

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

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

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

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

不会泄漏 key ,但会泄漏动态分配的 100 个整数。

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

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

不会泄漏内存。

所有这些总结起来就是;始终使用容器或智能指针;仅在确实需要时才使用原始指针指向的动态分配对象。

关于c++ - 函数退出时是否需要清除函数内部声明的STL 'map'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29295217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com