3

我的 std::map 看起来像这样。

std::map<int, std::string> *myMap = new std::map<int, std::string>[100];

我该如何删除这个?够delete myMap了吗?

4

3 回答 3

7

由于您已经分配了 100std::mapnew[],因此您必须使用 取消分配它们delete[]

delete[] myMap;

对于每个new/ new[],必须有一个delete/ delete[](分别)。

于 2013-04-04T16:56:57.597 回答
2

你有一系列地图,所以你几乎是正确的。您需要delete [] myMap正确清理阵列。

但不要那样做。使用 a vectorof maps 代替:

std::vector<std::map<int, std::string> > myMap(100);

这将自动为您处理所有内存管理和清理!

于 2013-04-04T18:19:06.473 回答
0

boost::scoped_ptr< std::map > myMap = new std::map[100];

强烈建议使用 boost::scoped_ptr 和 boost::shared_ptr(当一个内存位置被多个 thigns 访问时)它们是智能指针并且具有许多优点。它们支持自定义删除器,因此它们是内存安全的,这意味着您不必担心删除使用 new 或 new[] 创建的内容。它们也是线程安全的。他们的实现是模板化的,并且可以使用任何类型等。

于 2013-04-04T17:52:09.703 回答