閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

delete 後のポインタ変数は null で埋めとこう

deleteのお約束

  • NULLポインタのdeleteを安全に行わせる。

Effective C++ にも書いてあったのか……。これは本社のめがね先輩(誰ていうか失礼)の席にあったはずなので、いつぞやの日記*1でもこれを指しておけばよかったかな。

引用先の記事を見ていて、そういえば昔 if(ptr != 0) delete ptr; なんてやって、それだけで満足しているかのようなコードがあったことを思い出した。このコードが複数回呼ばれた時の動作は未定義になってしまうので (delete しても ptr 変数の指し示すアドレスは変わらない) 、本当に多重 delete を防ぎたいのなら if 文じゃなくって delete 後に ptr = 0; として使用済みのポインタ変数の値を 0 にしてやる必要がある。まあ、そのコードが落ちることは無かった (複数回呼ばれたりはしないものだった) のですが……。 たまたまうまくいっていたというのは一番厄介なパターンなので、自分の書いたコードがなぜうまくいっているのか、を把握しておくのは結構重要なことなのかな、と思ったり。

*1:http://d.hatena.ne.jp/wata_d/20051007/1128652583