在 C++ 中可以将新声明的映射的地址分配给现有映射的地址吗?

Is it OK to assign the address of a newly declared map with the address of an existing map in C++?

假设我有一个 class:

class A {
  public:
    int key;
    map<int,int> a;
};

Obj_A1 是 class A 的现有对象。在我的问题中的某处,我想构造另一个名为 Obj_A2 的对象并更新 Obj_A2 的成员,例如这个:

Obj_A2.key = Obj_A1.key + 1;
Obj_A2.a = Obj_A1.a;         // When a is large, this copy operation will be really time consuming.

所以我尝试绕过真正的数据传输,考虑到也许我可以将 Obj_A2.a 的地址分配给 Obj_A1.a 的地址。万一Obj_A2.a在内存中只是Obj_A1.a,完全没有数据重复。

所以我做了一些傻事(我是 C++ 的新手),即 &Obj_A2.a = &Obj_A1.a,并且有一些编译错误。

有谁知道正确的方法吗?

非常感谢。

class A {
  public:
    int key;
    map<int,int> *a;
};

...
Obj_A1.a = new map<int,int>;
...

Obj_A2.key = Obj_A1.key + 1;
Obj_A2.a = Obj_A1.a;    

听起来你想要一个 shared pointer

#include <memory>
#include <map>

class A {
  public:
    int key;
    std::shared_ptr<std::map<int,int>> a;
};

int main() {
    A Obj_A1, Obj_A2;
    Obj_A1.key = 0;
    Obj_A1.a = std::make_shared<std::map<int,int>>();

    Obj_A2.key = Obj_A1.key + 1;
    Obj_A2.a = Obj_A1.a;

    // or, more simply
    // Obj_A2 = Obj_A1;
    // Obj_A2.key++;
}

有了这个,Obj_A2.a 将指向与 Obj_A1.a 相同的地图,另一个人可以看到对地图的修改。