私の単純なゲームエンジンには、エンティティへのポインタを含むベクトルがあります。各エンティティには、新しいキーワードが割り当てられます。エンティティの関数を呼び出すためにイテレータを使用しているので、エンティティを削除するときに、次のようにイテレータも使用すると考えました。
vector<Entity*>::iterator iter;
for (iter = gameEntitys.begin(); iter != gameEntitys.end();) {
delete (*iter);
++iter;
}
しかし、私は今、恐ろしいメモリリークを抱えており、すべてのプロファイリングツールがラインを指していますdelete (*iter);
明らかに何か問題がありますが、ベクトルに含まれているエンティティを削除する(そして別のシーンのベクトルをクリアする)ための正しい方法は何ですか。使用gameEntitys.clear();
することは、実際のデータではなくポインタであるため、実際にはdeleteを呼び出さないベクトルの要素を削除するだけなので、私の知る限りでは役に立ちません。
編集:私はコメントを見ている蜂を持っています。Entityクラスはポリモーフィックではなく、サブクラスもありません。動的メモリの使用をやめ、非ポインタエンティティの通常の配列があった場合、より意味がありますか?
メモリリークがあることを私が知っている理由は、アプリケーションが起動すると、クラッシュする前にメモリ使用量が最大2GBを超えるためです。