一、概念
使用一个已经存在的对象,去构造(初始化)另一个对象
二、格式
参数加上const&,因为拷贝构造函数在几种情况下都会被隐式地使用,因此拷贝构造函数不应该是explict的
const:防止函数内部修改值
&:防止无限循环拷贝
类名(类名 const& 参数名)
{
函数体
}
三、拷贝构造函数的分类
浅拷贝:成员变量无动态内存(指针等)变量时,在拷贝构造函数内对成员变量只做简单的赋值,不做内存申请
深拷贝:成员变量有动态内存(指针等)变量时,在拷贝构造函数内对成员变量先进行内存申请,然后进行内容拷贝
默认拷贝构造:没有写拷贝构造时,系统默认给出(默认的为浅拷贝)
浅拷贝:
//此类情况使用浅拷贝 class Cperson { private: int a; public: Cperson(Cperson const& other);//拷贝构造 } Cperson::Cperson(Cperson const& other) { this->a=other.a; }
深拷贝: