C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 53 を表示中)
■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();

という記述にするのが良いのかと思っています。
(一応、デストラクタも呼ばれるし。。。)

もし、イディオム的に使われている記述とか、より、明確な記述などありましたら、
教えていただけるとうれしいです。
返信 編集キー/


管理者用

- Child Tree -