1

でこの例外がスローされる理由がわかりません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_ptrs に追いやられます。Object::objects静的変数であるを参照するコードは他にありません。

デバッガー (私は VS2013 を使用しています) で、空の行がステップインされ、決して呼び出されないコード間をジャンプするという奇妙なステップ動作に気付きました。そのため、これが VS2013 のバグであるかどうかはわかりません。それが違いを生む場合に備えて、私は C++11 の新機能のいくつかを別の場所で使用しています。

また、objectsコンストラクターで 1 にインクリメントされているのを見たことがありますが、デストラクタが呼び出されるとサイズが 0 になります。誰でも助けることができますか?

もう 1 つ: コードは GCC/Code::Blocks で問題なく動作します。

更新:解決策を見つける必要がありますが、その理由はわかっていると思います:それは静的オブジェクトの破壊の順序です。私はから派生GameObjectし、ポインターではなく、別の静的変数にObject共有ポインターを保持しています。現在、これらの共有ポインターはプログラムの終了時に解放されますが、その時までに、上記の生ポインターの静的リストは既に破棄されている可能性があります。GameObjectsObjectObject

4

2 に答える 2

0

デバッガーの奇妙なステップ動作は、デバッガーでリリース ビルドを実行しようとする場合によく見られます。代わりにデバッグ ビルドを使用してください。

于 2013-10-26T13:54:18.417 に答える