gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:24:48 27 4
gpt4 key购买 nike

假设我有一个类:

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

有谁知道正确的方法吗?

非常感谢。

最佳答案

听起来你想要一个 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 相同的 map ,另一方将看到对 map 的修改。

关于c++ - 在 C++ 中可以将新声明的映射的地址分配给现有映射的地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31106222/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com