我无法弄清楚为什么在remove
. 我在 Object.cpp 中有以下代码:
// Initialize class.
int Object::nextID = 0;
list<Object*> Object::objects;
Object::Object(string name)
{
SetName(name);
nextID++;
objects.push_back(this);
}
Object::~Object()
{
// Remove from the list of objects.
objects.remove(this);
}
从Object
I 派生其他类和对象正在堆上创建并降级到shared_ptr
s。没有其他代码引用Object::objects
,这是一个静态变量。
在调试器中(我使用的是 VS2013),我注意到奇怪的步进行为,空行被步进并在从未调用的代码之间跳转,所以我不确定这是否是 VS2013 的错误。如果它有所作为,我将在其他地方使用 C++11 的一些新特性。
此外,objects
在调用析构函数时大小为 0,即使我在构造函数中看到它被递增为 1。任何人都可以帮忙吗?
还有一件事:代码在 GCC/Code::Blocks 中运行良好。
更新:我想我知道为什么,虽然我需要找到一个解决方案:这是静态对象的破坏顺序。我派生GameObject
自Object
,并且我将共享指针保存GameObjects
在另一个静态变量中,而不是Object
指针。现在这些共享指针在程序终止时释放,但到那时Object
上面的原始指针的静态列表可能已经被破坏了。