2012-01-02 11 views
2

私は同様の質問を読んだことがありますが、この問題は典型的なもの(静的デストラクタは呼び出されていない)とまったく反対のようです。私は静的なクラスメンバーとしていくつかのvarsを持っているC + +でゲームエンジンを書いています。しかし、静的メンバーのデストラクタは呼び出すときに呼び出されるため、イニシャライズや適切な使用はしていないようです。これは、メンバーの定義と宣言である:ここ静的デストラクタが早く呼び出される

static CRendering RENDER_PIPELINE; 

(CDisplay.hで)

CRendering CDisplayCore::RENDER_PIPELINE; 

(CDisplay.cppで)

はデストラクタ呼び出しを示す呼び出しスタックであり、私は、静的VARの一つの方法を使用した直後:

#0 ( Seventh::CRendering::~CRendering(this=0x7fffffffe5f0, __in_chrg=<value optimized out>) (/home/alberto/SeventhEngine/src/Rendering/CRendering.cpp:38) 
#1 0x4152d9 Seventh::CEntity::UpdateGameLogic(this=0x8812f0) (/home/alberto/SeventhEngine/src/EntityCore/CEntity.cpp:109) 
#2 0x416b68 Seventh::UpdateGameLogicGeneric<std::basic_string<char>, Seventh::CEntity*>(map=...) (include/functors.h:64) 
#3 0x416968 Seventh::CEntityManager::UpdateGameLogic(this=0x63dc10) (/home/alberto/SeventhEngine/src/EntityCore/CEntityManager.cpp:65) 
#4 0x413122 Seventh::CEngine::UpdateGameLogic(this=0x63dab0) (/home/alberto/SeventhEngine/src/Engine/CEngine.cpp:175) 
#5 0x412fe6 Seventh::CEngine::RunGame(this=0x63dab0) (/home/alberto/SeventhEngine/src/Engine/CEngine.cpp:130) 
#6 0x40e027 main(argc=1, argv=0x7fffffffe8d8) (/home/alberto/SeventhEngine/main.cpp:31) 

はCEntityのコードは:: UpdateGameLogicです:

CDisplay::_Render().RenderTexture(...); 

RenderTextureはCRenderingの方法です。 _Render()はメンバの静的ゲッタです。

何が問題なのですか?

編集_Renderの定義()

static inline CRendering _Render() 
{ 
    return RENDER_PIPELINE; 
} 
+2

を望んでいますが、 '_Render()'の定義を示していただけますか?私は 'CRendering'オブジェクトの* copy *を返すことを賭けています。 –

+0

@GregHewgill答えよりもはるかに優れています:)私はあなたを賭けに戻します。 – jrok

+0

私は_Render()の定義を投稿しました。あなたは間違ったことを見ますか? –

答えて

2

あなた_Render()機能がCRenderingオブジェクトのコピーを返します。それを変更してみてください:

static inline CRendering &_Render() 

上記宣言は、単一静的CRenderingオブジェクトへ参照を返します。 &がなければ、C++はオブジェクト全体のコピーを作成し、それをあなたの関数から返します。そして、戻り値を使用するコードは呼び出しが終了した直後にそのコピーのデストラクタを呼び出します。

+0

それは理にかなっています!一定!ありがとう:) –

1
static inline CRendering _Render() 
{ 
    return RENDER_PIPELINE; 
} 

CRenderingは、値、つまりコピーで返されます。あなたが見ているのはおそらくコピーのデストラクタです。

はたぶん、あなたは

static inline CRendering &_Render() 
+0

問題が修正されました!ありがとう! –

関連する問題