方法中填充的shared_ptr到map在调用者中返回为空
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 }
});
}
我在这里做错了什么?
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 }
});
}
相关文章:
- 方法中填充的shared_ptr到map在调用者中返回为空
- C++ 线程端回调并返回结果
- 如何知道 sqlite 中的函数"回调"是否返回了一些东西?
- 从函数返回的左值引用实际上是右值(从调用者的角度来看)
- 是否可以在C 中使回调函数返回值
- 如何在类成员函数中打印调用者对象名称
- std::thread::d etach 在原始调用者被销毁后会导致崩溃
- 将局部变量作为向量的成员传递给被调用者
- 函数调用者如何使用头文件来确定如何处理已编译的二进制文件
- 能否在c++的成员函数中找到调用者?
- 线程问题:控制权没有返回给调用者
- 在异步API (c++)中,如何保证API在调用回调之前返回
- 如何在sublime text 2或3中找到c++函数的所有调用者
- c++返回相同的对象给调用者
- c++11为调用者构造对象
- 在调用者内部扩展被调用者的指导原则是什么(内联-编译器优化)
- Qt获取信号调用者并逐行读取文件
- 在c++中强制调用者捕获返回值并产生编译错误或警告的编译器标志
- c++:可以安全地使用函数内调用者的局部变量
- C++中的strchr如何保证其调用者不会修改作为参数传递的字符串