在 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
相同的地图,另一个人可以看到对地图的修改。
假设我有一个 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
相同的地图,另一个人可以看到对地图的修改。