在方法中填充的地图的shared_ptr在调用者中返回空

BKS*_*BKS 0 c++ stdmap shared-ptr c++14

我正在初始化一个shared_ptr以映射到一个名为GetData的单独函数中.此映射作为参数传递给GetData函数.但是,在main中,map在调用GetData函数后返回空.

#include <memory>
#include <map>

void  GetData(std::shared_ptr<std::map<int, int>> data);

int main()
{
    std::shared_ptr<std::map<int, int>> data2 = std::make_shared<std::map<int, int>>();
    GetData(data2);
    return 0;
}

void GetData(std::shared_ptr<std::map<int, int>> data)
{

    data = std::make_shared<std::map<int, int>>
        (std::initializer_list<std::map<int, int>::value_type>{
            { 1, 2 },
            { 5, 6 },
            { 4, 5 }
    });
}
Run Code Online (Sandbox Code Playgroud)

我在这做错了什么?

更新: 如果在参数仍未通过引用传递的情况下重写方法如下,我确实在调用GetData方法后在main中填充了map.

void GetData(std::shared_ptr<std::map<int, int>> data)
{
    data->insert(std::pair<int, int>(1,2));
    data->insert(std::pair<int, int>(45, 2));
}
Run Code Online (Sandbox Code Playgroud)

sel*_*bie 5

data通过引用传递:

void GetData(std::shared_ptr<std::map<int, int>>& data)
Run Code Online (Sandbox Code Playgroud)

或者最好,因此它更有意义的是"获取"并返回一些东西,返回值

std::shared_ptr<std::map<int, int>> GetData()
{

    return std::make_shared<std::map<int, int>>
        (std::initializer_list<std::map<int, int>::value_type>{
            { 1, 2 },
            { 5, 6 },
            { 4, 5 }
    });

}
Run Code Online (Sandbox Code Playgroud)