首页 > 解决方案 > 如何将元素插入到 std::map 的共享指针中?

问题描述

我可以像这样插入地图:

std::map<int, int> testMap;
testMap.insert(std::make_pair(0, 1));

但是,如果我用这样的共享指针包围地图:

std::shared_ptr<std::map<int, int>> testSharedMap;
testSharedMap->insert(std::make_pair(0, 1));

它不起作用。我收到运行时错误。

Exception thrown: read access violation.
_Scary was nullptr. occurred

std::map当它被包围时我该如何使用std::shared_ptr

标签: c++c++11shared-ptrsmart-pointersstdmap

解决方案


正如评论中提到的@CruzJean,您需要先分配内存,然后再使用 取消引用std::shared_ptr::operator->,否则(来自cppreference.com)。

如果存储的指针为 nul l ,则行为未定义。

例如,您可以执行以下操作:

#include <iostream>
#include <map>
#include <memory>

int main() 
{
    // convenience type(alias)
    using Map = std::map<int, int>;
    std::shared_ptr<Map> testSharedMap = std::make_shared<Map>();

    // now you can access the valid memory
    testSharedMap->insert(std::make_pair(0, 1));
    testSharedMap->emplace(1, 1);  // or using `std::map::emplace`

    // print the element in the Map by dereferencing the pointer
    for (const auto [key, value] : *testSharedMap)
        std::cout << key << " " << value << "\n";

    return 0;
}

推荐阅读