地图内的矢量是否安全?

时间:2014-04-11 21:08:47

标签: c++ vector map stl clear

如果你说的话,只是一个简单的问题:

using namespace std;

map< int, vector< string > > map1;

或者甚至可能:

map< int, map< int, vector< string > > > map2;

只是让你得到正确的想法:

map< int, map< int, map< int, vector< string > > > > map3;

如果我这样做:

map1.clear();
map2.clear();
map3.clear();

它是否安全,因为它会清空地图中的所有内容及其嵌套的地图,矢量,列表等?

注意: 我知道如果你使用指针需要手动浏览和删除,或者如果地图超出范围,它也应该没问题我在范围和堆栈时只对这种情况特别感兴趣。

2 个答案:

答案 0 :(得分:3)

是的,地图会破坏所有组件。

如果它的组件是STL容器,它们的析构函数将清除容器。

详细了解STL containers destructor of std::map

答案 1 :(得分:2)

是的,这是非常安全的。 STL容器负责内存管理。

但是,如果您存储指向您自己分配的对象的指针,您还必须自己删除它们:

std::vector<MyClass*> vec;
vec.push_back(new MyClass());
vec.clear(); // you get a memory leak here because you did not delete the object you allocated.