読者です 読者をやめる 読者になる 読者になる

たまに書きます。

気になって調べたことを書いていきます。まずはAboutページをご覧ください。

スマートポインタみたいなのをCでやってみる

かなり昔にBinary Hacksで読んだのだけど、久々に自分のgistを見返してみてそんなのあったなぁと思ったので、備忘録として書いておく。
常に、自分の引き出しと言うか武器は、適切と思ったらすぐに持ち出せる状況にしておきたいので。

というわけで、gccのcleanupについて。
gccでは自動変数の宣言時に、変数のattributeとしてcleanup(function_name)をつけておけば、スコープから脱出するときにその変数が削除されるタイミングでfunction_nameで指定した関数が呼ばれるらしい。
超シンプルなコードは以下のコード。


$> ./a.out
argument = 10289
0x7fff55373798 was freed.
0x7fff553737a0 was freed.

shared_ptrっていうよりかはscoped_ptrに近いのか。とりあえずきちんと使うと結構便利だよね、これ。
ちょっとgccのattribute構文を大分忘れているので、久々にドキュメントを読み返そう。

別にこれ使い道は必ずしもメモリ確保に対する解放用の関数でなくても良いので、うまくやれば関数の実行時間計測をお手軽にやるのにも使えそう。