我正在初始化一个共享的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 } }); }
我在这里做错什么了?
更新: 如果在参数仍未通过引用传递的情况下按如下方式重新编写方法,则在调用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 通过引用:
data
void GetData(std::shared_ptr<std::map<int, int>>& data)
或者更可取的是,作为函数“get”并返回一些内容,并返回值
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 } }); }