c++ - 为什么 map 大小返回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;
  }

输出: 尺寸 0

关于为什么这会将 map 大小返回为 0 以及需要做什么才能修复的任何想法

最佳答案

您的 getA 方法正在返回 a 的临时拷贝,因此您对 setMap 的调用正在修改它复印件,不是原件。解决此问题的一种方法是让 getA 返回指向 a

的引用或指针

关于c++ - 为什么 map 大小返回0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1684418/

相关文章:

c++ - 我不小心创建了一个病毒。这怎么是病毒?

c++ - 比较常规选择和准备选择性能

c++ - 用于生成密码哈希的 C/C++ 函数(使用 MD5 或其他算法)?

C++:二叉树的奇数和

c++ - 使用N-API时如何避免段错误?

c++ - ubuntu Linux 中的数组复制实际上不起作用

c++ - Windows C++ 间歇性套接字断开连接

c++ - 防止成员函数被单独调用

c++ - 此卸载区域中使用的 map<shared_ptr<TiXmlDocument>, double> 不可按位复制

C++按字母顺序对结构的 vector 进行排序