川合のプログラミング言語自作のためのテキスト第四版#002
(1) オブジェクトのdeinit忘れ問題
- C++はオブジェクト指向言語で、コンストラクタを使ってオブジェクトを初期化すると、スコープから抜けるときにはデストラクタを呼んでオブジェクトの後片付け処理をすることができます。・・・でもC言語にはそういう機能はありません。デストラクタも自分でちゃんと呼び出す必要があります。しょうがないです。
- でも本当の問題は「自分でいちいちやらなければいけない」というところではなく、「たまにやり忘れる」というところなのです。・・・デストラクタと書くと長いので、ここでは deinit と書くことにします。
- deinit を忘れると、メモリがたくさんリークしたり、最後に書き出すべき内容が内部バッファにたまったままになっていて失われたり、もうほんとにいいことないです。malloc_chkAll() でいっぱい表示されると、げんなりしてしまいます。しかもそれって実はたった一つのオブジェクトを deinit し忘れているだけだった、なんてこともよくあります(オブジェクトの中に動的確保するメモリがあると、こういうことになりやすい)。
- ということで、 init したときに登録して、deinitしたら登録から消えるようなそんな簡単な仕組みがあれば、きっと便利になるはずです。
- えーまだデバッグ支援機能を作るの?もう飽きたよーと思うかもしれませんが、デバッグ支援機能はこれが最後です(たぶん)。とにかくバグをどんどんつぶしていけるような土台を作って、その上に楽しい機能を作っていくのです。デバッグ時間が短くなるはずなので、遠回りのように見えて、実はゴールには早く到達できるかもしれません。まさに急がば回れですね!
こめんと欄