繁体   English   中英

如何在两个对象之间干净地传递std :: map?

[英]How do I cleanly pass a std::map between two objects?

我有一个创建地图的工厂方法对象,如下所示:

// std namespace is imported

Foo* createFoo() {
   map<int,int>* fooMap = new map<int,int>();
   for (int i=0;i < 4;i++) {
      fooMap->insert(make_pair(i+1, i+2));
   }
   return new Foo(fooMap);
}

foo类如下:

class Foo { 
    private: 
        map<int,int>* m_fooMap; 
    public: 
        Foo(map<int,int>* fooMap) : m_fooMap(fooMap) { }; 
        void doIt() {
            cout << m_fooMap->at(1) << endl;
        }
}

如果我调用doIt函数,这似乎引发异常。 当我调试时,我发现地图对象似乎没有被创建和填充。 如何在堆上正确创建映射?

PS:我不想创建地图并按值传递,我更愿意通过指针来完成学习。 另外,如果我在堆栈上创建地图,则会填充该地图,但是由于它超出了范围,因此我当然不能将其传递给Foo对象。

我希望没有任何显式动态内存分配的方法:

class Foo { 
    private: 
        std::map<int,int> m_fooMap; 
    public: 
        Foo(const std::map<int,int>& fooMap) : m_fooMap(fooMap) {}; 
        Foo(std::map<int,int>&& fooMap) : m_fooMap(std::move(fooMap)) {}; 
        void doIt() {
            cout << m_fooMap.at(1) << endl;
        }
};

Foo createFoo() 
{
   std::map<int,int> fooMap;
   for (int i=0;i < 4;i++) {
      fooMap.insert(make_pair(i+1, i+2));
   }
   return Foo(fooMap);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM