【发布时间】:2018-05-31 06:58:50
【问题描述】:
在 C++ 中,深拷贝有重载的复制构造函数和赋值重载。由于默认可用的是浅拷贝。
在C语言中,具有指针成员的结构,如果传递给函数或分配给已经创建的新结构对象,是深拷贝还是浅拷贝??
例如
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;
}
【问题讨论】:
-
“深拷贝”在 C 中意味着什么?
-
按值传递总是复制。而C没有“深”或“浅”复制的概念,它所做的基本上是一个
memcpy调用。 -
你的代码和你的问题有什么关系?
-
你不应该在 C 中使用
malloc吗? -
@KillzoneKid 当然。您还应该使用
printf。并释放您分配的内存。
标签: c++ c deep-copy shallow-copy