私はゲーム フレームワークを書いており、レンダラーのようなプラットフォームに依存するコードを一般化してカプセル化して、移植を少し簡単にしようとしています。フレームワークをきれいに使用しながら、これを達成しようとしています。現在、静的変数と名前空間に問題があります...
// Renderer.h 名前空間レンダラー { static IRenderer* g_pRenderer = NULL; static IRenderer* Get(void) { return g_pRenderer; } static IRenderer* CreateD3DRenderer() { g_pRenderer = new RendererD3D(); // IRenderer から派生 g_pRenderer を返します。 } }
したがって、私のmain()
では、呼び出すことができCreateD3DRenderer()
、インスタンスを正常に返します。g_pRenderer
関数のスコープ内で作成されて返されているため、値を保持しています...ただし、 . をRenderer::Get()
返しますNULL
。'static'
init of から削除するg_pRenderer
と、他のファイルで使用すると衝突が発生します。
どうしたの?