Effective C++ Item 132009年07月30日 11時26分26秒

  • リソースの漏洩を避けるために RAII オブジェクトを使うこと。RAII オブジェクトを生成するときにリソースを同時に取得し、破棄するときに同じく開放する。
  • tr1::shared_ptr と auto_ptr が RAII クラスとしてよく使われる。

RAII は Resource Acquristion Is Initalization の略でリソースを管理する為のオブジェクト。リソースを取得するのと初期化をするのは同じ時が多いことから名前が付けられた。

auto_ptr は破棄される時にそれが指しているポインタを delete する。複数の auto_ptr で同じオブジェクトを指さない事。delete を複数回呼ぶという事態に陥る。そのため、auto_ptr のコピーコンストラクタや代入演算子は NULL を返す。その為、STL では auto_ptr は使えない。

auto_ptr の代りに、reference-counting smart pointer (RCSP) の shared_ptr を用いることも出来る。なお、RCSP はループされている参照をうまく扱えない。また、auto_ptr と shared_ptr は delete[] を呼ばないので配列には使えない。これらの手法はヒープを割り当てる場合にのみしか使えず、他の形のリソースは扱えない。

前回次回