在C ++中,深度拷贝有重载的拷贝构造函数和赋值重载。由于默认可用是浅拷贝。
在C中,具有指针成员的结构,如果传递给函数或分配给已经创建的新结构对象,则是深拷贝还是浅拷贝?
E.g
struct data {
int a;
int *b;
};
void test_func(struct data tes)
{
tes.a =3;
int *c = new int[1];
c[0]=2;
tes.b =c;
std::cout<<*tes.b;
}
int main() {
struct data test;
int *c = new int;
*c=4;
test.a = 1;
test.b =c;
std::cout<<*test.b;
test_func(test);
std::cout<<*test.b;
}
答案 0 :(得分:4)
C中的结构只是像memcpy一样被复制。因此,您获得指针的副本,但不是指向指针的内容的副本。在这种情况下,c ++没有什么不同。
在C中你也可以为&#34;深拷贝&#34;写一个函数。如果你喜欢。每种OOP都可以用C来完成,但你必须手工编写每一个OOP。