Schleife - neues Objekt - Destruktor ?
-
Hallo,
ich erzeuge in einer Schleife jeweils immer das gleiche Objekt und beschreibe es und gebe es weiter. Im neue Schleifendurchlauf passiert wieder das gleiche, nun die Frage muss ich das alte Objekt freigeben oder nicht also per Destruktor? Weil ich rufe jedes mal einen Konstruktor aufs gleiche Objekt jede Runde auf:
while(true) { classname objekt(aq.image()); objektotherclass.pass(objekt); }sowas halt.
-
Also frei geben oder den Destructor aufrufen musst du nicht, da das/die Objekte ja auf dem Stack erzeugt werden. Aber ich würde jetzt mal behaupten dass das was du hier hin geschrieben hast in deiner while noch nie wirklich hast live ausprobiert, denn dann würdest du schon gemerkt haben das deine Klasse objektotherclass kein Objekt mehr hat wenn die while schleife in die nächste Runde geht, denn dein objekt ist nur im Scope des aktuellen while durchlauf existent, danach wird das objekt automatisch wieder zerstört.
Also ich geh mal davon aus das es sicher nicht das ist was du willst, entweder du beschriebst etwas genauer was du vor hast oder du suchst dir einen anderen Weg oder vielleicht sagt dir hier jemand anderes noch was für dich besseres
-
Das Programm stört es nicht und es funktioniert auch wollte nur sehen wo ich evtl. einen Fehler gemacht habe.
Es wird intern nochmal ein Objekt erzeugt und die Daten übergeben und dann weitergeschickt.Was mich aber interessiert ist wann das Objekt genau zerstört wird?
Gruß
-
Dazu kannst du einfach im Konstruktor und Destruktor der jeweiligen Klasse eine Ausgabe auf die Konsole machen - so siehst du wann ein Objekt der Klasse zerstört wird.
-
Danke

Werden eigentlich die Objekte immer nach dem aktuellen scope zerstört, auch dynamische?
do { testclass objekt = new testclass(init); }while(false); //Hier gibts kein Objekt mehr? :open_mouth:Danke Gruß
-
asdfwaf schrieb:
Danke

Werden eigentlich die Objekte immer nach dem aktuellen scope zerstört, auch dynamische?
do { testclass objekt = new testclass(init); }while(false); //Hier gibts kein Objekt mehr? :open_mouth:Danke Gruß
1. Kompiliert das?

2. Antwort auf deine Frage: Nein, Objekte die auf dem Freestore angelegt wurde (mitnew) werden erst dann zerstört, wenndeleteauf einen Zeiger, der auf dieses Objekt zeigt, aufgerufen wird.
-
Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (auch C++0x und C++11) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
theta schrieb:
2. Antwort auf deine Frage: Nein, Objekte die auf dem Freestore angelegt wurde (mit
new) werden erst dann zerstört, wenndeleteauf einen Zeiger, der auf dieses Objekt zeigt, aufgerufen wird.Weiterführender Gedanke, gerichtet an den Fragesteller: Deswegen verwaltet man dynamischen Speicher (und allgemein alles, was einer Freigabe bedarf) auch nicht händisch mit Zeigern, sondern schreibt sich eine Klasse, die auf diesen Speicher zeigt und in deren Destruktor dann der Speicher wieder frei gegeben wird. Dann legt man ein Objekt dieser Halterklasse an. Dieses wird beim Verlassen des Scopes automatisch zerstört (selbst wenn man den Scope mittels einer Exception oder gar mit einem goto verlässt) und man kann daher gar keine Fehler mehr bei der Speicherverwaltung machen.
Wenn du das irgendwo im großen Stil anders siehst (außer als Demonstration, wie es nicht geht) oder dir das gar jemand anders beibringt, darfst du die C++-Kompetenz der Person anzweifeln.Stichwort dazu ist "RAII". Da man das ständig braucht, gibt es solche Halterklassen schon haufenweise in der Standardbibliothek. Nennt man Smartpointer und Container.