以前、「GCC拡張を使ったusing」という記事を書きました。あれから2ヶ月半ほど経ちましたが、今になって思うと、肝心なGCC拡張を忘れていたことに気付きます。"cleanup"がそれです。 "cleanup"は__attribute__で関数を指定するGCC拡張です。"cleanup"を指定した自動変数は、その生存期間が終わる時点で、指定した関数が呼び出されます。つまり、デストラクタと同じことができるわけです。 話を簡単にするために、後始末としてはfreeでメモリを解放する場合に限定して考えることにします。 #include <stdio.h> #include <stdlib.h> #include <string.h> void cleanup(void *p) { free(*(void**)p); puts(__func__); } #define using(decl) \ f