Effective C++ Item 11 ― 2009年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 は既に解放されているので意図した通りには動かない。
コメント
トラックバック
このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2009/07/27/4459576/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。