1. copy constructor (拷贝构造器)
(1) 拷贝构造器的第一个参数必须是类的引用,其它的参数必须有默认值,如下举例:
class Copy {
public:
Copy(); // default constructor
Copy(const Copy&); // copy constructor
};
(2) 不同于default constructor (默认构造器)在定义其它构造器之后编译系统不自动生成, copy constructor不管有没有定义其它构造器,都会存在自动生成或者手工定义。
类成员通过成员自己定义的copy constructor进行复制,基本类型成员可以直接复制。
(3) 以下几种类型会使用拷贝构造器
使用=定义变量;
向函数传递一个非引用类型;
返回一个非引用类型;
(4) 定义一个带有拷贝构造函数的类
class HasPtr {
public:
HasPtr(const std::string &s = std::string()) :
ps(new std::string(s)), i(0) { }
HasPtr(const HasPtr &hp) : ps(new std::string(*hp.ps)), i(hp.i) { }
private:
std::string *ps;
int i;
};
(5) copy assigned operator (拷贝赋值运算符),给上面的类加一个拷贝赋值运算符
class HasPtr {
public:
HasPtr(const std::string &s = std::string()) :
ps(new std::string(s)), i(0) { }
HasPtr(const HasPtr &hp) : ps(new std::string(*hp.ps)), i(hp.i) { }
HasPtr& operator=(const HasPtr &rhs_hp) {
if (this != &rhs_hp) {
std::string *temp_ps = new std::string(*rhs_hp.ps);
delete ps;
ps = temp_ps;
i = rhs_hp.i;
}
return *this;
}
private:
std::string *ps;
int i;
};