C++ > 初期化用クラス


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

初期化用クラス

プログラムの起動時と終了時に"一度だけ"初期化、終了処理をするためのクラス。
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(インクルード回数) かな。

|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|