删除整数和字符串的简单std映射的完美方法

时间:2013-04-04 16:56:30

标签: c++ arrays dictionary

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

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

如何删除此内容? delete myMap足够吗?

3 个答案:

答案 0 :(得分:7)

由于您已使用std::map分配了100个new[],因此您必须使用delete[]解除分配:

delete[] myMap;

对于每个new / new[],必须分别有delete / delete[]

答案 1 :(得分:2)

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

但不要这样做。请改为使用vector地图:

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

这将自动为您完成所有内存管理和清理工作!

答案 2 :(得分:0)

升压:: scoped_ptr的&LT; std :: map&gt; myMap = new std :: map [100];

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