结构深拷贝

时间:2011-05-23 21:24:32

标签: c++ structure deep-copy

这可能是一个非常基本的问题,但不知怎的,它让我受骗......当我编写测试代码时,它似乎有效,但生产中出现了问题。

// 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;

test2test1的深层副本吗?或者有问题吗?如果使用C编译器或C ++编译器编译代码是否重要?

2 个答案:

答案 0 :(得分:10)

深层副本只受到指针的阻碍,因此您的struct将在C中正确复制。除非您定义自己的operator= 不是,否则它也适用于C ++ 正确复制。您只需要为带有指针的类型定义operator=,因为指针的浅表副本将复制指针但共享数据。

答案 1 :(得分:3)

我的回答与C ++有关。我只能猜测它仍然适合C。

这将是一个浅薄的副本。

如果对象包含指针 t1t2,每个对象都包含一些间接动态分配的内存块的位置,则需要深层复制。< / p>

但是,对象包含实际数组时间的直接对象,所以你可以使用浅拷贝。

(这有点误导,但是你无法自己手动分配给数组对象!)