复制构造函数的理解

2014-11-24 10:20:28 · 作者: · 浏览: 1

复制够造函数顾名思义就是一个构造函数

但是呢这个构造函数是复制的

接下来看一段代码

#include
//定义一个名字类
class name{
char* str;//有一个字符串成员
public:
name(const char* n){
str=new char[strlen(n)+1];//为字符串分配空间
strcpy(str,n);//复制字符串参数到字符串成员中
}
~name(){
delete str;//释放字符串
}
};

int main()
{
name a("peter");//定义一个名字
if(true){
name b=a;//把名字付给b
}
return 0;
}
这段代码是没有写复制构造函数的那么程序的构造函数只执行了一次,但是析构函数执行了两次

这是就是复制构造函数的作用了我们看下面的一段代码

#include
//定义一个名字类
class name{
char* str;//有一个字符串成员
public:
name(const name& nam){
str=new char[strlen(nam.str)+1];//为字符串分配空间
strcpy(str,nam.str);//复制字符串参数到字符串成员中
}
name(const char* n){
str=new char[strlen(n)+1];//为字符串分配空间
strcpy(str,n);//复制字符串参数到字符串成员中
}
~name(){
delete str;//释放字符串
}
};

int main()
{
name a("peter");//定义一个名字
if(true){
name b=a;//把名字付给b
}
return 0;
}

这段代码写了复制构造函数那么程序执行了一次构造一次复制构造两次析构