ゆとりーなの日記

日記的な事を書いて行くと思はれる

自己代入

C++に於いて代入演算子を自前で定義する場合自己代入が問題になることがあります。こんなコードを見かけました。

class hoge {
 public:
  hoge(const int val = 0) : val_(val) {
    std::cout << "デフォルトコンストラクタ" << std::endl;
  }
  hoge(const hoge &rhs) : val_(rhs.val_) {
    std::cout << "コピーコンストラクタ" << std::endl;
  }
  hoge &operator =(const hoge &rhs) {
    std::cout << "代入演算子" << std::endl;
    if (this != &rhs) {
      val_ = rhs.val_;
    }
    return *this;
  }
 private:
  int val_;
};

代入演算子のところにif節があります。何でも自己代入対策のための小細工らしいのですが、これ、メンバが何かのハンドルならまだしも、int型でもこの対策打っとかないと何か問題がおこるのでしょうか。何も起きないと思うのですがいかがでしょう。