c++中的拷贝构造函数的问题

2025-04-24 06:03:22
推荐回答(1个)
回答1:

拷贝构造函数多被用来实现类对象的深拷贝。

例如:
class A
{
private:
char *p;
public:
A()
{
p=new char[10];
}
}

不定义拷贝构造函数时,你如果对两个对象赋值,就会是浅拷贝,即:简单的成员变量相等。
A a,b;
a=b;
则,相当于作了a.p=b.p,a,b的p指针指向了同一个地址,但是数据并没有拷贝一份,这叫做浅拷贝。

所以定义拷贝构造函数:
A(A& a)
{
p=new char[strlen(a.p)+1];
strcpy(p,a.p);
}

然后再作a=b或者A a(b),作的就是上面函数了,p就有a.p,b.p两个数据拷贝,不至于在释放时一个空间被释放两次。

拷贝构造函数在大多数情况下就用来做这种事。

所以如果没有指针变量,一般就不需要自己定义拷贝构造函数。因为系统默认的拷贝构造函数可以实现浅拷贝。而一般常量(只要不是指针),浅拷贝和深拷贝效果一样。