条款15: 让operator=返回*this的引用
c++的设计者bjarne stroustrup想使用户自定义类型尽可能地和固定类型的工作方式相似。所以有重载运算符,类型转换函数、拷贝赋值、拷贝构造函数等。
类c中,缺省版本的operator=函数具有如下形式:
c& c::operator=(const c&);
注意返回值没有const修饰,虽然可以加,但与缺省形式不一致,并不推荐。
string& operator=(const char *rhs);
这个是为了兼容char*,避免多余的隐式转换,成本变大
条款16: 在operator=中对所有数据成员赋值
这条需要注意派生类赋值时,也带上基类赋值。
class derived: public base {
public:
derived(const derived& rhs): base(rhs), y(rhs.y) {}
};
条款17: 在operator=中检查给自己赋值的情况
c& c::operator=(const c& rhs){
// 检查对自己赋值的情况
if (*this == rhs)// 假设operator=存在
return *this;
...
}
也可以考虑用uuid标识唯一对象。
这几个条款都是范式,按照std标准形式即可。