gpt4 book ai didi

c++ - 深拷贝结构C++

转载 作者:太空宇宙 更新时间:2023-11-03 10:42:08 25 4
gpt4 key购买 nike

我正在尝试为我的结构构建一个深层复制功能。在主程序中,我尝试将 a 深复制到 c 中,因此最终它应该打印字符串“B”。我究竟做错了什么?我知道我现在缺少一些晦涩的指针内容。

#include <iostream>

using namespace std;

struct Thing {

size_t length;
std::string txt;
struct Thing *things[];
};

struct Thing *deepCopy(struct Thing *origin) {

Thing tmp;
tmp.length = origin->length;
for(int i=0;i<tmp.length; ++i)
tmp.things[i] = deepCopy(origin->things[i]);

return &tmp;
}

int main() {

Thing a, b, *c;

a.length = 1;
a.things[0] = &b;
a.txt = "A";
b.txt = "B";
b.length = 0;
c = deepCopy(&a);

cout<<c->txt;
return 0;
}

最佳答案

执行深拷贝的最佳方法是编写代码,让编译器为您完成。编译器自动生成复制构造函数和赋值运算符,用于复制对象的每个成员。只要每个成员都知道如何复制自己,这通常会按照您想要的方式工作。如果您有指针和手动管理的内存,它可能不会自动工作,因为指针不知道它们是否拥有它们指向的内容。如果您不使用任何指针,通常就没问题。

所以如果你这样写你的对象:

struct Thing
{
std::string txt;
std::vector<Thing> things;
};

复制它会自动工作。

Thing a;
Thing b = a; // just works

我删除了大小字段,因为 std::vector 知道它自己的大小,所以不需要它。

关于c++ - 深拷贝结构C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33423453/

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