std :: listとメモリリークに問題があります:
class AbstractObject
{
public:
virtual void Say() = 0;
}
class RealObject : public AbstractObject
{
public:
virtual void Say() { cout << "Real Obj Says..." << endl; } //Do I need the "virtual" keyword here too?
}
class AnotherRealObject : public AbstractObject
{
public:
virtual void Say() { cout << "Another Real Obj Says..." << endl; } //Do I need the "virtual" keyword here too?
}
class PackOfObjects
{
public:
std::list<AbstractObject*> objects; //list of pointers because it doesn't let me create a list of an abstract class
void Say()
{
for(std::list<AbstractObject*>::iterator obj = objects.begin(); obj != objects.end(); obj++)
{
(*obj)->Say();
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
PackOfObjs myObjs;
RealObject objA;
myObjs.objects.push_back(&objA); //This adds 1 memory leak
AnotherRealObject objB;
myObjs.objects.push_back(&objB); //This adds another 1 memory leak
_gettch();
_CrtDumpMemoryLeaks();
return 0;
}
PackOfObjsが宣言されただけで、すでに2つのメモリリークがあり、std :: listを削除するとそれらはなくなり、リストに追加するアドレスごとに1ずつ増加します。リストをクリアして、クリアする前にポイントされたすべてのオブジェクトを削除するいくつかのコードを試しましたが、少なくとも2つのメモリリークがまだ残っています。
新しいものを使用しなかったので(追加した要素でも)、リスト自体がいくつかの変数を作成し、それらを削除しないと推測していますが、これを修正するにはどうすればよいですか?