でこの例外がスローされる理由がわかりません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);
}
IからObject
派生した他のクラスとオブジェクトがヒープ上に作成され、shared_ptr
s に追いやられます。Object::objects
静的変数であるを参照するコードは他にありません。
デバッガー (私は VS2013 を使用しています) で、空の行がステップインされ、決して呼び出されないコード間をジャンプするという奇妙なステップ動作に気付きました。そのため、これが VS2013 のバグであるかどうかはわかりません。それが違いを生む場合に備えて、私は C++11 の新機能のいくつかを別の場所で使用しています。
また、objects
コンストラクターで 1 にインクリメントされているのを見たことがありますが、デストラクタが呼び出されるとサイズが 0 になります。誰でも助けることができますか?
もう 1 つ: コードは GCC/Code::Blocks で問題なく動作します。
更新:解決策を見つける必要がありますが、その理由はわかっていると思います:それは静的オブジェクトの破壊の順序です。私はから派生GameObject
し、ポインターではなく、別の静的変数にObject
共有ポインターを保持しています。現在、これらの共有ポインターはプログラムの終了時に解放されますが、その時までに、上記の生ポインターの静的リストは既に破棄されている可能性があります。GameObjects
Object
Object