尽管我已经阅读过类似的问题,但这个问题似乎与典型的问题(静态析构函数未被调用)完全相反。我正在用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