Alle Instanzen einer Klasse löschen

Hallo,

in meinem C++ Programm soll beim Destruktoraufruf eines Objektes einer bestimmten Klasse, nennen wir sie Class1, alle womöglich vorhandenen Instanzen (besser gesagt, Class2*) von Class2 mit delete gelöscht werden.
Also, der Konstruktor von Class1 löscht alle vorhandenen Instanzen der Class2.

Wie geht das???

Sicherlich nicht allzu schwierig, wenn man weiß wie’s geht…

Bitte helft mir, is echt wichtig!

Gruß,
Nina

Hallo Nina!

Wenn du im Destruktor von Class1 die Variablen von Class2 mit delete freigibst, wird automatisch auch der Destruktor von Class2, und aller in Class2 instanzierten Klassen aufgerufen.
Du mußt halt nur aufpassen, daß du alles was du mit new angelegt hast auch wieder freigegeben wird (Achtung auf Arrays (z.b.: m_pClass2= new Class2[5] muß mit delete m_pClass2 [] freigegeben werden (Achte auf eckige Klammer))).

Gruß Pauli!

Hallo Pauli!

Wenn du im Destruktor von Class1 die Variablen von Class2 mit
delete freigibst, wird automatisch auch der Destruktor von
Class2, und aller in Class2 instanzierten Klassen aufgerufen.
Du mußt halt nur aufpassen, daß du alles was du mit new
angelegt hast auch wieder freigegeben wird (Achtung auf Arrays
(z.b.: m_pClass2= new Class2[5] muß mit delete m_pClass2 []
freigegeben werden (Achte auf eckige Klammer))).

Das ist mir alles klar!
Nur, mein spezielles Problem

Ein KundenVerzeichnis hat

list::iterator VIterator;
list Verzeichnis;

im Verzeichnis werden Pointer auf Kunden gespeichert.

Nun soll, logischerweise, beim Destruktoraufruf von KundenVerzeichnis auch für jeden Kunden der Destruktor aufgerufen werden.
Die Kunden wurden zuvor im Verzeichnis dynamisch angelegt, also kann ich nicht sagen „delete Kunde1“, „delete Kunde2“ etc.

Würd mich freuen, wenn du mir auch da weiterhelfen kannst!

Gruß,
Nina

Die Kunden wurden zuvor im Verzeichnis dynamisch angelegt,
also kann ich nicht sagen „delete Kunde1“, „delete Kunde2“
etc.

Die Klasse list hat sicher Methoden um durch die in ihr gespeicherten Elemente zu iterieren. Könnte so aussehen:

for( int i = 0; i 
Das hängt aber ganz von der Implementierung von list ab.

Grüße, Robert

list::iterator VIterator;
list Verzeichnis;

Als Ergänzung, das schaut so aus, als ob es da eine eigene Iterator-Klasse geben. So wie es da steht bringts noch nicht viel, weil der zuerst deklarierte iterator nichts mit dem eigentlichen List-Objekt zu tun hat, aber eventuell hat dann list so eine Methode wie getIterator() die dir dann ein list::iterator-Objekt zurückgibt.

Grüße, Robert

hallo, bin mir nicht sicher, ob dir das hilft, aber zumindest funktioniert das hier wenn man vector statt list benutzt, vielleicht gehts aber mit list auch.

for(VIterator=Verzeichnis.begin(); VIterator!=Verzeichnis.end(); VIterator++)
{

delete (*VIterator);
Verzeichnis.erase(VIterator);
VIterator–;

}

gruss tobias

D A N K E
Hallo Tobias!

Das funktioniert!
Ich bin gestern abend noch selbst darauf gekommen - aber trotzdem danke, denn ohne meinen gestrigen Geistesblitz hätte ich das hier ganz dringend gebraucht!

Mit List funktioniert’s also auch - und da bin ich froh drum, denn es MUSS eine List sein (Anweisung vom Dozenten *g*)

Grüße,
Nina

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]