码迷,mamicode.com
首页 > 其他好文 > 详细

复制拷贝函数+重载operator=

时间:2014-09-30 02:35:21      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   ar   sp   div   art   

首先,如下写法:

Class A = B;


Class A;
A = B;

并不等价,前者等价于A(B),后者等价于A.operator=(B)

  问题源于我想要用类似如下写法完成复制拷贝函数

Class(Class &t) {
    *this = t;
}

  尝试重载operator=,由于写挂了,或者说是return错误的对象,导致死循环或者编译不通过

1.死循环:

  关键在于对复制拷贝函数的理解(什么时候会调用),如果函数的形参不是引用,或者return一个非引用的对象,

就会调用复制拷贝函数,而我的复制拷贝函数又会调用operator=,这样陷入死循环

2.编译不通过

  operator= return的对象,应当是引用,避免调用复制拷贝函数,而这个引用应该是引用对象本身*this,而非传入的const引用

 

写得也挺乱的,主要是几小时前的问题了,还是要具体的问题具体分析,但是限于本人比较懒,所以列出参考.

 

1.Class A = B;是个什么意思:http://stackoverflow.com/questions/2462773/c-copy-construct-construct-and-assign-question

2.拷贝构造函数详解:http://blog.csdn.net/lwbeyond/article/details/6202256

3.一个例子加强理解: http://bbs.csdn.net/topics/40006610

复制拷贝函数+重载operator=

标签:style   blog   http   color   io   ar   sp   div   art   

原文地址:http://www.cnblogs.com/gemmeg/p/4001211.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!