现在的位置: 首页 > 综合 > 正文

C++复制构造函数

2014年06月12日 ⁄ 综合 ⁄ 共 729字 ⁄ 字号 评论关闭

今天看了effect C++看到了,不知构造函数,就回忆了一下,然后再网上看了一些资料,就来总结一下

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(Widget rhs)
说的不好的,欢迎拍砖,互相学习,第一写.

抱歉!评论已关闭.