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

来源:百度知道 编辑:UC知道 时间:2024/07/05 13:27:26
我总是不明白C++中的拷贝构造函数到底有什么用或是说具体的用处是什么 有时老把它当成重载看 希望有高人给指明一下 最好有个例子

还有C++中的链表我也搞不明白 最好有个例子

谢谢

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

例如:
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两个数据拷贝,不至于在释放时一个空间被释放两次。

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

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

拷贝构造函数是用来复制相同类型对象的,当用一个已经初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用。
比如你有同一个类型的两个对象a,b,那么:
a = b;
就会用到你的拷贝构造函数来将对象b复制到对象a

至于链表,建议你去读一下数据结构的书吧