我想不通爲什麼這個異常拋出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
我獲得其他類和對象正在堆上創建並退居shared_ptr
秒。沒有其他代碼指代Object::objects
,這是一個靜態變量。
在調試器(我正在使用VS2013)中,我注意到奇怪的步進行爲,空行被踩入並在從未調用的代碼之間跳來跳去,所以我不確定這是否是一個錯誤VS2013。如果它有所作爲,我在其他地方使用了C++ 11的一些新功能。
此外,當調用析構函數時,objects
的大小爲0,即使我已經看到它在構造函數中增加到1。誰能幫忙?
還有一件事:代碼在GCC/Code :: Blocks中運行得很好。
更新:我想我知道爲什麼,但我需要找到一個解決方案:它是靜態對象的破壞順序。我從Object
派生出GameObject
,我在另一個靜態變量中保留GameObjects
的共享指針,而不是Object
指針。現在這些共享指針在程序終止時釋放,但那時上面的指針的靜態列表可能已經被破壞。
難道你沒有忘記在VS禁用優化? – mvidelgauz
優化是diabled。 –
可能你沒有運行你認爲你正在運行的代碼。將一些'OutputDebugString'添加到代碼中,重新編譯並觀察調試輸出窗口。與其成爲編譯器錯誤的可能性相差甚遠。 – Yakk