假设我有一个班级:
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
,并且有一些编译器错误。
有谁知道正确的方法吗?
非常感谢。
答案 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;