结构深度复制

Structure deep copy

本文关键字:复制 深度 结构      更新时间:2023-10-16

这可能是一个非常基本的问题,但不知怎么的,它骗了我。。。当我编写测试代码时,它似乎可以工作,但在生产中出现了问题。

// Header file
#define length 100
typedef struct testStr_t {
    int a;
    char b;
    char t1[length];
    char t2[length];
} test;
void populateTest(test*);
// source file
test test1;
test test2;
populateTest(&test1);
test2 = test1;

test2会是test1的深度复制吗?还是这里有gotchas?用C编译器还是C++编译器编译代码有关系吗?

深度复制只受指针的阻碍,因此您的struct将在C中正确复制。它在C++中也能工作,除非您定义自己的operator=不能正确复制。您只需要为具有指针的类型定义operator=,因为指针的浅拷贝将复制指针,但共享数据。

我的答案与C++有关。我只能猜测它仍然适用于C.

这将是一个肤浅的复制品。

如果对象包含指针t1t2,每个指针都包含一些间接的、动态分配的内存块的位置,则需要一个深度拷贝。

但是,对象包含实际数组时间的直接对象,所以您可以使用浅层复制。

(这有点误导,因为它可以工作,但您不能自己手动分配给数组对象!)