是否可以使用C ++中现有地图的地址分配新声明的地图的地址?

时间:2015-06-29 00:29:38

标签: c++ pointers dictionary memory-address

假设我有一个班级:

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

Obj_A1是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,并且有一些编译器错误。

有谁知道正确的方法吗?

非常感谢。

2 个答案:

答案 0 :(得分:2)

听起来你想要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相同的地图,另一个地图将从一个地图中修改地图。

答案 1 :(得分:0)

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;