チキチキ C++訓戒シリーズ その1

自分でつくったクラスにoperator++を実装したからといって、安易にインクリメントしてはいけない。

配列でないポインタにoperator++を用いるとバグの元になる。operator++を自分で作ったがために、一見ポインタに見えないシンボルを++でインクリメントすることに違和感を感じにくいからである。

特に、誰も書かないとは思うが、次のようなコードを書くことは厳禁である。

// bad code like this never works!!!!!
class myclass{
 public:
 ...
  mynode& operator++(){ return *it_++;  } ;
 private:
  vector<mynode>::iterator it_;
  vector<mynode> nodes_;
}

myclass* mcp = new myclass();
while( mcp->begin(); mcp->hasNext(); ++mcp){
  const mynode& x = mcp->current();
  x.work();
}
delete mcp; //当然、deleteも忘れてないぜ?!