请问这个删除包含在地图中的指针[...]
不,根据您提供的代码,您将泄漏地图的每个成员。
通常,每new
必须有一个匹配delete
。对于地图,您有一个delete
,但对于地图中的元素没有。
这个问题的最正确的解决方案是根本不使用动态分配。只是存储MyType
小号目录,如果可能的话:......和
map<string, MyType>
而不是自动动态分配map
本身,店:
map<string,MyType> my_map;
如果自动存储时间是不可能的一些原因,然后使用智能指针进行动态分配。给定一个C++编译器11,使用unique_ptr
(或者很少,shared_ptr
甚至weak_ptr
)在map
的元素:(给定一个C++编译器03,使用其升压当量)
map<string, unique_ptr<MyType>> my_map;
那么当my_map
被销毁时,所有元素将会是delete
d。
霸菱这一切,如果你是在一个情况下没有上面会为你工作(我会被高度怀疑),那么你就需要遍历地图youself:
struct deleter
{
template <typename T> operator() (const T& rhs) const
{
delete rhs.second;
}
};
for_each (my_map->begin(), my_map->end(), deleter());
在C++ 11,这可能是由拉姆达的东西沿着线:
for_each (my_map->begin(), my_map->end(), [](auto item) -> void
{
delete item.second;
});
后面的'map'(以及标准库中的大多数(如果不是全部的话)容器)并没有被设计为在销毁时删除它包含的任何指针。 – Nbr44
好的谢谢。我读到的文件不是很清楚。它是这样写的:“这样可以有效地减少容器的大小,删除的元素数量会被摧毁。” – Max
这是一个常见的误解 - _pointers_本身确实被破坏,但是这并不会改变它指向的内存位置的状态。 – Nbr44