这会删除地图[...]中包含的指针吗?
不,鉴于您提供的代码,您将泄露地图的每个成员。
通常,对于每一个都new必须有一个匹配的delete. 您有一个delete用于地图的,但没有用于其中的元素。
解决这个问题最正确的方法是根本不使用动态分配。如果可能,只需存储MyTypes 目录:
map<string, MyType>
...而不是动态分配map自身,而是自动存储:
map<string,MyType> my_map;
如果由于某种原因无法自动存储持续时间,则使用智能指针进行动态分配。给定一个 C++11 编译器,使用unique_ptr(或者,很少,shared_ptr甚至weak_ptr)作为 中的元素map:
map<string, unique_ptr<MyType>> my_map;
(给定一个 C++03 编译器,使用它的 Boost 等价物。)然后当my_map被销毁时,所有元素都将是deleted。
排除所有这些,如果您处于上述任何一种情况都不适合您的情况(我非常怀疑),那么您将需要自己迭代地图:
struct deleter
{
template <typename T> operator() (const T& rhs) const
{
delete rhs.second;
}
};
for_each (my_map->begin(), my_map->end(), deleter());
在 C++11 中,这可以做成一个 lambda,类似于:
for_each (my_map->begin(), my_map->end(), [](auto item) -> void
{
delete item.second;
});