Pointer als Parameter - Problem
-
Hab's inzwischen hinbekommen .. Beitrag 2 hat mir da geholfen
Danke
-
Vergiss aber bitte nicht das mit new angeforderte Objekt nachher auch mit delete zu löschen, wenn du es nicht mehr brauchst.
-
Ich habe einen Destruktor für das Objekt geschrieben in dem folgendes steht:
delete this;
Geht sowas gut? Oder bin ich auf dem Holzweg? Die Zeile wird doch hoffentlich automatisch ausgeführt, sobald ich das Objekt mit v1.erase(x) aus dem Vector lösche, oder?
-
rapthor schrieb:
Ich habe einen Destruktor für das Objekt geschrieben in dem folgendes steht:
delete this;
Geht sowas gut? Oder bin ich auf dem Holzweg? Die Zeile wird doch hoffentlich automatisch ausgeführt, sobald ich das Objekt mit v1.erase(x) aus dem Vector lösche, oder?
Das geht schief:
delete ruft erst den Destruktor von this auf und danach gibt es den Speicher frei.
Da du bereits im Dtor bist, würde ich eine Rekursion erwarten.
-
Da bist du wohl auf dem Holzweg. :p
Wenn du mit erase() einen Zeiger deines Vektors löscht wird kein Destruktor
für das zugehörige Objekt aufgerufen.
Du musst beim Löschen des Vektors für die einzelnen Zeiger jeweils delete
aufrufen. Dieses delete bewirkt den Aufruf des Destruktors für das Objekt.
In diesem Sinn ist dein delete this im Destruktor natürlich sinnlos.
Du solltest dich vielleicht nochmal mit dem Thema mit Hilfe eines Tutorials
beschäftigen.
-
Was ich jetzt beim Löschen mache, ist folgendes:
delete v1.at(position); v1.erase(v1.begin() + position);
.. mir ist nur noch nicht ganz klar, was genau im Destruktor meines Objektes zu geschehen hat. Die Objekte besitzen jeweils zwei private Variablen und ein paar public Methoden. Nicht weiter wild!?
-
Der delete passt.
Aber dein delete this macht keinen Sinn (für das was du hier beschrieben hast).
-
Achso, also ist mein Destruktor überflüssig? So, dass ich dessen Implementierung getrost vernachlässigen kann?
Der wäre ja vielleicht u.a. nötig, wenn ich verkettete Objekte habe, die ich alle rekursiv löschen müsste, wenn sie z.B. mit Pointern verzweigt wären. Aber das ist bei mir ja nicht der Fall.
-
Im Destruktor eines Objektes werden (im Regelfall) nur die innerhalb des Obejektes dynamisch allokierten Objekte freigegeben.
Wenn Du z.B. innerhalb einer Klasse einen char* hast, dem Du erst zur Laufzeit Speicher mit new zuweist, mußt du diesen im Destruktor der Klasse auch wieder freigeben.
-
Also ein delete this wird beispielsweise verwendet wenn du keinen Destruktor für
deine Klasse willst und stattdessen eine Cleanup()-Funktion hast. Diese ruft dann
delete this auf.
Bei der COM-Programmiereung beispielsweise zählt ein Release() einen Zähler runter
erst wenn der Zähler die 0 erreicht hat, wird das Objekt mit delete this zerstört.
-
Ahhh alles klar. Ich danke euch
Ihr konntet mir helfen.