備忘録 @ ウィキ
初期化用クラス
最終更新:
mlnk
-
view
初期化用クラス
プログラムの起動時と終了時に"一度だけ"初期化、終了処理をするためのクラス。
winsockを使うときなどに。
// initializer.h
#ifndef _INITIALIZER_H
#define _INITIALIZER_H
namespace initializer {
class initializer {
private:
class do_init {
private:
do_init() {
// 初期化処理をここに
}
~do_init() {
// 終了処理をここに
}
public:
static void instance() {
static do_init p;
}
};
public:
initializer() {
do_init::instance();
}
~initializer() {}
};
static initializer initializer_;
} // namespace
#endif
このヘッダファイルを複数のソースファイルからインクルードしても
1回しかdo_init()のコンストラクタ、デストラクタは呼び出されない。
マルチスレッド環境ではこれは保証できないけどプログラムの起動時は大抵シングルスレッドだろう。
消費メモリは 1(static do_init) + 1(static initializer) * n(インクルード回数) かな。