首先,如下写法:
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
时间: 2024-10-26 18:42:07