儘管我已經閱讀過類似的問題,但這個問題似乎與典型的問題(靜態析構函數未被調用)完全相反。我正在用C++寫一個遊戲引擎,其中有幾個變量作爲靜態類成員。但是,似乎我並沒有正確初始化或使用它,因爲每當我嘗試調用靜態成員的析構函數時都會調用它。這是成員的定義和聲明:早期調用靜態析構函數
static CRendering RENDER_PIPELINE;
(在CDisplay.h)
CRendering CDisplayCore::RENDER_PIPELINE;
(在CDisplay.cpp)
這裏是表示析構函數調用一個調用棧,在我使用靜態變量的一種方法之後:
#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(...);
渲染紋理是CRendering的方法。 _Render()是成員的靜態獲取者。
這裏有什麼問題?
編輯_Render的定義()
static inline CRendering _Render()
{
return RENDER_PIPELINE;
}
請你教'_Render()'的定義是什麼?我敢打賭,它會返回'CRendering'對象的*副本*。 – 2012-01-02 18:15:13
@GregHewgill比答案好得多:)我會支持你的賭注。 – jrok 2012-01-02 18:16:30
我發佈了_Render()的定義。你看到有什麼不對嗎? – 2012-01-02 18:17:51