【发布时间】:2012-02-01 00:01:06
【问题描述】:
虽然我已经阅读了类似的问题,但这个问题似乎与典型问题完全相反(未调用静态析构函数)。我正在用 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(...);
RenderTexture 是一种 CRendering 方法。 _Render() 是成员的静态 getter。
这可能是什么问题?
编辑 _Render() 的定义
static inline CRendering _Render()
{
return RENDER_PIPELINE;
}
【问题讨论】:
-
您能说明
_Render()的定义吗?我敢打赌它会返回您的CRendering对象的副本。 -
@GregHewgill 比答案好得多:) 我会支持你的赌注。
-
我贴出了_Render()的定义。你看出什么不对了吗?
标签: c++ static destructor