代码之家  ›  专栏  ›  技术社区  ›  whoami

方法中填充的要映射的共享端口在调用方中返回为空

  •  -1
  • whoami  · 技术社区  · 6 年前

    我正在初始化一个共享的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));
    }
    
    1 回复  |  直到 6 年前
        1
  •  5
  •   selbie    6 年前

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