这可能是一个非常基本的问题,但不知怎的,它让我受骗......当我编写测试代码时,它似乎有效,但生产中出现了问题。
// 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
的深层副本吗?或者有问题吗?如果使用C编译器或C ++编译器编译代码是否重要?
答案 0 :(得分:10)
深层副本只受到指针的阻碍,因此您的struct
将在C中正确复制。除非您定义自己的operator=
不是,否则它也适用于C ++ 正确复制。您只需要为带有指针的类型定义operator=
,因为指针的浅表副本将复制指针但共享数据。
答案 1 :(得分:3)
我的回答与C ++有关。我只能猜测它仍然适合C。
这将是一个浅薄的副本。
如果对象包含指针 t1
和t2
,每个对象都包含一些间接动态分配的内存块的位置,则需要深层复制。< / p>
但是,对象包含实际数组时间的直接对象,所以你可以使用浅拷贝。
(这有点误导,但是你无法自己手动分配给数组对象!)