*什么是拷贝构造函数又可以叫复制构造函数(浅拷贝与深拷贝)
下面的代码演示了什么是拷贝构造函数,如果不人为定义拷贝构造函数,系统将默认给你分配一个浅拷贝的拷贝构造函数
class cat
{
public:
//构造函数
cat():m_pMyName(NULL),m_unAge(0)
{
cout<<"cat defult ctor"<<endl;
}
//拷贝构造函数(复制构造函数)
cat(const cat& other)
{
this->m_unAge = other.m_unAge;
//把自己的空间释放先
if (0 != this->m_pMyName)
{
delete this->m_pMyName;
this->m_pMyName = NULL;
}
//如果目标有名字
if (other.m_pMyName)
{
//动态分配一个名字长度+1的堆..此处为深拷贝
int len = strlen(other.m_pMyName);
m_pMyName = new char[len + 1];
memset(m_pMyName , 0 , len+1);
memcpy(m_pMyName , other.m_pMyName , len+1);
}
/*
//如果目标有名字
if (other.m_pMyName)
{
//动态分配一个名字长度+1的堆..此处为浅拷贝..只复制了指针,没复制指针指向的对象
m_pMyName = other.m_pMyName;
}
*/
}
unsigned int m_unAge;
char* m_pMyName;
}
//实战应用...
void main()
{
cat A;
cat B(A);//构造对象B,使用拷贝构造函数构造
cat C = A; //注意这里的对象初始化要调用拷贝构造函数,而非赋值
}
注意:如果你的类里面包含了指针之类的对象(请记得实现深拷贝)