代入演算子の注意点

*thisへの参照を返す

代入演算子は

int x, y, z;
x = y = z = 0;

とつなげて使うことができる。これは代入演算子が「左辺への参照」を戻すことで実現されている。
クラスに代入演算子を定義する場合、このコンベンションは守るべきである。

class Test{
public:
...
  Test& operator=(const Test &rhs){
    ...
    return *this;
  }
};

自己代入に備える

代入時に

  1. リソースの初期化
  2. 代入

と実装していると、自己代入の場合に「代入したいオブジェクト」が「代入先のリソース初期化」により破壊されることが起きる。
回避策としては

  • コピー元とコピー先のアドレスを比較し自己代入時は何もしないようにする
  • 処理順を注意深く決める
  • コピーを取り、コピーと交換する

がある。

参考文献

Effective C++ 第3版, スコット・メイヤーズ著

スポンサーリンク







シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク