今天看了effectC++看到了,不知构造函数,就回忆了一下,然后网上看了一些资料,就来总结一下
class Widget {
public:
Widget(); //default 构造函数
Widget(const Widget & rhs); //copy 构造函数
Widget& operator=(const Widget& rhs); //copy assignment 操作符
~Widget{};();
};
Widget w1; //default 构造函数
Widget w2(w1); //调用copy构造函数
w1 = w2; //调用copy assignment操作符
当你看到赋值操作符小心,因为”=”语法可以用来调用copy构造函数
Widget w3 = w1 //copy 构造函数
copy 构造,和copy 赋值,很容易区分,幸好,如果一个新的对象别定义(与上面的w3),则调用copy构造,反之则赋值.看到很多网上的资料都是说,只要一看到对象赋值另外一个同类型的对象,就是copy 构造,这是错误的现在来看
至于我当初学习copy构造的时候,为什么要引用来作为传递了??
传入参数用const类型的引用,可以节省参数赋值的开支,最后赋值给的是this指针指向的对象,复制构造函数会默认的进行简单变量的赋值。
另外重要的原因就是:避免递归调用!
如果定义如下的构造函数:
Widget:: Widget( Widget rhs);
那么当用一个 Widget对象初始化另一个 Widget对象时,如
Widget w4=w4; //假设w4是一个已存在Widget对象
该复制构造函数就会被无限制地递归下去:调用WIdget(Widgetr)