码迷,mamicode.com
首页 > 其他好文 > 详细

关于类拷贝造函数

时间:2015-12-30 19:29:16      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

    1默认拷贝构造函数:默认拷贝构造函数是构造函数的重载,它是依据对象来创建对象的,如Student a(b); 表示通过b对象来初始化a,那么这种对象创建活动为拷贝构造函数。如果对象实体是单纯的对象本体时,对象的拷贝构造与变量的拷贝并无两样,但是若对象本体不同于对象实体时,对象的拷贝就有了差别(如指针的拷贝)。如下:

#include<iostream>
using namespace std;
class Student{
char* pname;
public:
Student(char *pname = "NoName"){
cout<<"成功构造"<<endl;
this->pname = new char[strlen(pname)+1];
strcpy(this->pname, pname);
}
~Student(){
delete[]pname;
}
};
int main(){
Student a("LiLy");
Student b(a);
return 0;
}

在默认拷贝构造时,pname指针也复制了,a对象与b对象的pname都指向同一个"Lily",此时在析构时候,"Lily"这块区域被删除2次,于是系统会出错。这是由于a对象本体与实体不一样所导致的。此时需要重写拷贝构造函数覆盖默认拷贝构造函数:

Student (const Student &s){

     pname=new char[strlen(s.pname)+1];

    strcpy(pname,s,pname);

}

自定义的拷贝构造函数也是类名,他是构造函数的重载。拷贝构造函数必须使用对象的常引用。当自定义对象作为参数传递时,能用引用就尽量用引用,能用常量引用的就用常量引用。

关于类拷贝造函数

标签:

原文地址:http://www.cnblogs.com/td15980891505/p/5089509.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!