備忘録 @ ウィキ

初期化用クラス

最終更新:

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(インクルード回数) かな。

目安箱バナー