delete this; はアリか

昨日 ChangeLog にメモっていたのに日記に貼るのを忘れていた。
カーネル側のMutexインスタンスをを複数のプロセスが共有していている状況があり、Mutexインスタンスの破棄タイミングをコントロールするために自前でリファレンスカウンタで管理しようと思いつきました。
参照されなくなった時点で delete this; を呼べば良いかなと思ったのですが、ふと「delete this;」ってC++的にアリなんだっけと疑問が浮かびました。
どうも調べると文法的にはアリのようです。


ただし、気をつけるべきポイントがあります。

  • 自動変数として確保されるとまずい
  • その直後にthisを参照するようなコードは書かない

自動変数のやつは気づき辛いと思うので注意が必要。


今回はカーネル内だし、用途がかなり限定的なので delete this; を許容することにしよう。
次に同じような事があったらlibgui/gui/System/Poninter.hのようなリファレンスカウンタを使える仕組みを導入します。