shared_ptr 在方法中填充的映射在调用者中返回为空
shared_ptr to map populated in a method comes back empty in the caller
我正在初始化一个 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 }
});
}
我做错了什么?
更新:
如果我按如下方式重写方法,而参数仍未通过引用传递,我确实会在调用 GetData 方法后在主函数中填充地图。
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)
或者更可取的是,作为 "gets" 和 returns 函数更有意义,返回值
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 }
});
}
我正在初始化一个 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 }
});
}
我做错了什么?
更新: 如果我按如下方式重写方法,而参数仍未通过引用传递,我确实会在调用 GetData 方法后在主函数中填充地图。
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)
或者更可取的是,作为 "gets" 和 returns 函数更有意义,返回值
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 }
});
}