【问题标题】:Perfect way to delete a simple std map of ints and strings删除整数和字符串的简单标准映射的完美方法
【发布时间】:2026-01-21 14:00:01
【问题描述】:

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

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

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

【问题讨论】:

  • 您能简单说明一下为什么您要解决的问题需要分配std::map 数组吗?
  • std::vector&lt;std::map&lt;int, std::string&gt;&gt; myMaps(100); 怎么样?那么你就不用担心删除它了。

标签: c++ arrays dictionary


【解决方案1】:

因为你已经用new[]分配了100个std::maps,你必须用delete[]去分配它们:

delete[] myMap;

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

【讨论】:

    【解决方案2】:

    你有一组地图,所以你几乎是正确的。您需要delete [] myMap 才能正确清理数组。

    但不要那样做。改用 vector 的地图:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 如果你使用 Boost,你需要scoped_array,而不是scoped_ptr,你需要直接而不是复制初始化。在现代 C++ 中,std::unique_ptr&lt;map_type[]&gt;(或std::vector)会更好。