3.构造函数(四):拷贝构造函数
3.1概述
如果一个带参数的构造函数的参数是自身类类型的话,这个函数就是拷贝构造函数。参考以下代码:
class A{
protected:
int a;
char c;
//...
private:
//...
double b;
string s;
public:
//...
float f;
A(const A&);
//...
};
以上代码的构造函数就是拷贝构造函数。
3.2拷贝构造函数的特点与等价代码
上面的代码中的A(const A&);
若改A(const A&)=default
则它等价于以下代码:
A(const A& member):
a(member.a),
c(member.c),
b(member.b),
s(member.s),
f(member.f){ }
我们看到,每个数据成员都被拷贝了一次(member.成员)来初始化。
4.拷贝赋值运算符
4.1重载拷贝赋值运算符
详见类(六),https://blog.youkuaiyun.com/abcd7038/article/details/104942699
重载拷贝赋值运算符就是operator=
。
4.2=delete
在C++中,为了阻止调用某个函数,我们可以用=delete来声明它,如:阻止拷贝:
class A{
//...
public:
A operator=(const A&,const A&)=delete;
};
如上面的代码,我们不能拷贝A的对象。
4.3不可删除的函数
在一个类中,构造函数和析构函数是不可删除的。因为如果删除了这些函数,那么我们将无法创建这个类类型的对象。