*thisへの参照を返す
代入演算子は
int x, y, z; x = y = z = 0;
とつなげて使うことができる。これは代入演算子が「左辺への参照」を戻すことで実現されている。
クラスに代入演算子を定義する場合、このコンベンションは守るべきである。
class Test{ public: ... Test& operator=(const Test &rhs){ ... return *this; } };
自己代入に備える
代入時に
- リソースの初期化
- 代入
と実装していると、自己代入の場合に「代入したいオブジェクト」が「代入先のリソース初期化」により破壊されることが起きる。
回避策としては
- コピー元とコピー先のアドレスを比較し自己代入時は何もしないようにする
- 処理順を注意深く決める
- コピーを取り、コピーと交換する
がある。
参考文献
Effective C++ 第3版, スコット・メイヤーズ著