首先,如下写法:

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

posted on 2014-09-30 00:26  Gemmeg  阅读(178)  评论(0编辑  收藏  举报