■29366 / ) |
一度だけ初期化するための書き方 |
□投稿者/ 雲 (12回)-(2008/12/09(Tue) 06:12:03)
|
分類:[C/C++]
こんにちは。 最近、GDII+ なるものを使う必要に迫られて、GDI+ の初期化で少し悩んでいます。
MSDN を見ると、GDI+ を使う前に、一度だけ、初期化関数を呼ぶ必要があると書いて あるのですが、一度だけ初期化をすることを明確に記述する時には、どのように 書くのがわかりやすいのでしょうか?
今の自分の頭の中にあるのは、シングルトンパターンを援用して、以下のように 記述するのが良いのかな?と思っています。
//////////////////////////////////////////////////////////////////////////// // 定義 //////////////////////////////////////////////////////////////////////////// class GDIPlus{ public: static GDIPlus& Init(){ static GDIPlus instance; return( instance ); } ~GDIPlus(){ GdiplusShutdown( gdiplus_token_ ); gdiplus_token_ = 0; }
private: GDIPlus(){GdiplusStartup( &gdiplus_token_, &gdiplus_startup_input_, 0 ); } GDIPlus( const GDIPlus & );
private: static Gdiplus::GdiplusStartupInput gdiplus_startup_input_; static ULONG_PTR gdiplus_token_; };
Gdiplus::GdiplusStartupInput GDIPlus::gdiplus_startup_input_; ULONG_PTR GDIPlus::gdiplus_token_ = NULL; ////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////// // 使い方 //////////////////////////////////////////////////////////////////////////// // GDI+ を使う前に、 GDIPlus &g = GDIPlus::Init();
という記述にするのが良いのかと思っています。 (一応、デストラクタも呼ばれるし。。。)
もし、イディオム的に使われている記述とか、より、明確な記述などありましたら、 教えていただけるとうれしいです。
|
|