方法中填充的shared_ptr到map在调用者中返回为空

shared_ptr to map populated in a method comes back empty in the caller

本文关键字:调用者 返回 map ptr 填充 shared 方法      更新时间:2023-10-16

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

#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 }
});
}

我在这里做错了什么?

UPDATE:如果我按照如下方式重写方法,而参数仍然没有通过引用传递,那么在调用GetData方法后,我确实会在main中填充映射。

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));
}

通过引用传递data

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

或者最好是,这样它更有意义,因为函数"得到"并返回一些东西,返回值

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 }
});
}