C++ 清除多级std::map
如果我有这样的多级地图C++ 清除多级std::map,c++,stdmap,C++,Stdmap,如果我有这样的多级地图 std::map<int, std::map<int, int>> myMap; constructor() { std::map<int, int> myInsideMap; myInsideMap.insert(std::make_pair(1,2)); myMap.insert(std::make_pair(1, myInsideMap)); } destructor() { // is th
std::map<int, std::map<int, int>> myMap;
constructor() {
std::map<int, int> myInsideMap;
myInsideMap.insert(std::make_pair(1,2));
myMap.insert(std::make_pair(1, myInsideMap));
}
destructor() {
// is this cleared correctly?? recursively?
myMap.clear();
}
std::map myMap;
构造函数(){
std::映射myInsideMap;
myInsideMap.insert(std::make_pair(1,2));
插入(std::make_pair(1,myInsideMap));
}
析构函数(){
//是否以递归方式正确清除?
myMap.clear();
}
我希望myMap.clear()也会清除myInsideMap。
它会像我预期的那样工作吗?是的,地图将销毁所有组件。你可能想了解一下 我希望myMap.clear()也会清除myInsideMap。它会像我预期的那样工作吗 否。
myMap.clear()
将销毁自己的myInsideMap
副本<退出构造函数()
作用域后,code>myMap将不再存在
标准库容器拥有自己的元素。当它们被清除或不复存在时,它们的元素也会被破坏。引用标准第23.2.1节中关于一般容器要求的注释: 析构函数应用于一个函数的每个元素;所有内存都已释放。 我希望myMap.clear()也会清除myInsideMap 没有。myMap只清除mapMap的内容,mapMap内部包含一个std::pair对象,该对象又有一个myInsideMap的副本 myInsideMap是在堆栈上分配的,因此当构造函数()退出时,当其局部作用域结束时,它将被解除分配。同样,这不是破坏myMap中的myInsideMap(副本)的地方 这是否正确清除??递归地
是的,myMap在这里被清除,但是递归销毁如下所示-std::pair析构函数在内部被调用,其键和值被销毁。由于myInsideMap的副本是该对结构中的值,因此该内容也会被销毁。因此,破坏性的“递归”不会触及构造函数()中的本地或实际myInsideMap。调用后,map
myMap
中的数据已被销毁,因此这个问题实际上是没有意义的,因为“内部”映射不再存在。您可以轻松地将调试输出添加到包含对象的析构函数中,以找到答案。也就是说,考虑在地图中使用两个int作为键,如<代码> map < /代码>。我的直觉是这更接近你想要表达的内容。它不会清除myInsideMap,但它会破坏它包含的所有地图myInsideMap
是构造函数本地的,因此当构造函数退出时它会被销毁。但是myInsideMap
不是myMap
的组件,因此它不会被清除。