【问题标题】:C++ will be struct as key for std::map copied to std::map? [closed]C++ 将作为将 std::map 复制到 std::map 的键的结构? [关闭]
【发布时间】:2019-07-31 13:35:52
【问题描述】:

我有一个函数,我使用 struct 作为std::map 的键。但我不确定如果我退出我的函数,该结构会发生什么。将存储在std::map 中,还是在退出功能范围时被删除,std::map 中的进一步搜索使用将被破坏?

    //Map is standard class
    class Map { ... }

    //hashmap of maps
    std::map<Point, Map*> maps;

    void Maps::addMap(Map *map, int row, int column) {
      Point point = {row, column};
      maps[point] = map;
    }

编辑:

感谢托马斯·萨布里克

我知道像 int 这样的基本类型会被复制,但我不知道 struct 会发生什么。如果被复制,那么我是安全的

编辑 2

我改变了我的问题,我不知道该问什么才能得到我的答案,对不起。

【问题讨论】:

标签: c++ function struct scope


【解决方案1】:

std::map 存储密钥的副本,无论密钥的类型如何。虽然局部变量pointaddMap 的末尾被销毁,但maps 没有被销毁,它的元素也没有被销毁,由键和值组成。

【讨论】:

    【解决方案2】:

    point 将在堆栈上分配,并且不应在 addMap 返回后访问。 指向 Map 的指针将被添加到由 point 给定的位置的地图中。地图仍将 在 addMap 返回后有条目。当您添加指向地图的指针时,您需要 请注意,指向的内存至少会在地图的生命周期内持续存在。由于您来自 Java,我建议您仔细检查。

    【讨论】:

    • 谢谢,我提出这个问题是因为我正在搜索我的程序中的随机崩溃,我不确定使用结构作为 std::map 的键。
    猜你喜欢
    • 2012-06-10
    • 2021-12-24
    • 2019-05-20
    • 2020-06-06
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    相关资源
    最近更新 更多