【发布时间】:2013-07-25 13:07:45
【问题描述】:
我正在使用std::map 将字符串值映射到MyType *。我的地图声明如下所示:
map<string, MyType *> *my_map = new map<string, MyType>;
my_map 是我的一个类的私有成员变量。我的问题是我不确定如何销毁地图。删除地图时,我还想在地图中包含的所有MyType * 上调用delete。这是我当前的析构函数:
my_map->erase(my_map->begin(), my_map->end());
delete my_map;
这会删除映射中包含的指针,还是我需要在调用擦除之前遍历映射以删除每个指针?
【问题讨论】:
-
后者 -
map(以及标准库中的大多数(如果不是全部?)容器)并未设计为在销毁时删除它包含的任何指针。 -
好的,谢谢。我阅读的文档不是很清楚。上面写着:
This effectively reduces the container size by the number of elements removed, which are destroyed. -
这是一个常见的误解 - 指针 本身确实被破坏了,但这不会改变它们指向的内存位置的状态。
-
为什么痴迷于指针和
new?这有什么问题:map<string, MyType> my_map; -
设计出了点问题。为什么容器有自己的指针?