とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

コンストラクタ/デストラクタ(ファイナライザ)

オブジェクトを単にスタックに積むC++

#include<iostream>
class Object{
public:
  Object(){std::cout<<"コンストラクタ"<<std::endl;}
  ~Object(){std::cout<<"デストラクタ"<<std::endl;}
};
int main(){
  Object o;
}

こんなコードをCで実現しようとすると,

#include"Object.h"
int main(){
  Object o = new_Object();
  Object_Finalize(o);
}

こうなってしまう。使うときにnew_Hogeする分には良いが,Hoge_Finalizeの呼び出しを忘れてしまうだろう。
newとFinalizeを対にして,必ずFinalizeされるフレームワークを思いついた。しかもこのフレームワークを使えばsetjmp/longjmpしたとしてもFinalizeされる。すばらしい!(大げさ)