Effective C++ Item 112009年07月27日 10時02分45秒

  • operator= は正しく実装する。実行の順序、copy-and-swap などを正しく使う。
  • ふたつ以上のクラスを取り、オブジェクトを変更する関数では、同じオブジェクトかどうかを判定する必要がある。

自動生成の代入演算子を用いない場合は責任を持って実装すること。新しいメンバ変数を加えた時に問題が置きやすい。多態性 (polymorphism) を使っている場合は、特に気を付ける必要がある。

また、代入演算子では複製元が複製先と同じではないかの判定をするべきか見定める必要がある。動的に割り当てている場合だと、失敗し取り返しの付かないことになることもある。


class Bitmap{...};
class Widget{
    ...
    private:
    Mitmap *pb;
}

Widget& Widget::operator=(const Widget& rhs)
{
    delete pb;
    pb = new Bitmap(*rhs.pb);
    return *this;
}

この例では this == rhs の場合、pb は既に解放されているので意図した通りには動かない。

前回次回