为什么地图大小返回0

kal*_*kal 0 c++

  using namespace std;

  class A {
      public:
         A() {}
         ~A() {}

         map<int, string*>& getMap() {
             return mapStr;
         }

         void setMap(const map<int,string*> m) {
             mapStr = m;
         }

      private:
          map <int, string*> mapStr;
  };


  class B {

      public:
      A getA() {
          return a;
      }
      private:
      A a;

  };

  int main(int argc, char*argv[]) {

      map<int, string*> mm;
      mm.insert(std::make_pair(1, new string("abc")));
      mm.insert(std::make_pair(2, new string("def")));

      B b;
      b.getA().setMap(mm);
      cout << "Size " << b.getA().getMap().size() << std::endl;
      return 0;
  }
Run Code Online (Sandbox Code Playgroud)

输出:大小为0

关于为什么这会将地图大小返回为0以及需要修复的内容的任何想法

Lau*_*ves 15

你的getA方法返回一个临时复制a,所以你的呼叫setMap被修改副本,而不是原件.解决此问题的一种方法是getA返回引用或指针a