Seite 1 von 1
[gelöst] pointer delete in Methoden
Verfasst: 21. März 2012 14:32
von Aenni
Hallo zusammen, ich hab mal eine pinzipielle Frage zur Löschung von Pointern die auf dem heap angelegt werden.
Code: Alles auswählen
void MainWindow::test(){
test1 *tst= test1(this);
if (tst->exec() == QDialog::Accepted){
test2*tst2= new test2();
tst2->doSth();
//delete tst2 hier wäre sinfrei da die arbeit von tst2->doSth ggf noch nicht fertig ist. objekt stirbt direkt bzw die refrenz
}
delete tst;
tst = 0;
}
dieses kleine beispiel zeigt schon mein Problem. Wann bzw Wo lösche ich denn die pointer tst und tst2?
Vielen Dank im Voraus
Gruß!
Re: pointer delete in Methoden
Verfasst: 21. März 2012 16:08
von franzf
Ich stell mir gerade eine Frage:
//delete tst2 hier wäre sinfrei da die arbeit von tst2->doSth ggf noch nicht fertig ist. objekt stirbt direkt bzw die refrenz
Wie kommst du darauf?
Re: pointer delete in Methoden
Verfasst: 21. März 2012 17:00
von Aenni
wenn ich den Pointer an der oben auskommentierten stelle lösche, dann wird der destruktor aufgerufen egal ob die methode fertig ist oder nicht. falls die methode noch nicht fertig ist, wird das objekt dennoch zerstört .
Daher wäre meine Frage wie ich das besser handeln könnte, bzw sicherstellen könnte, dass das objekt auch wirklich gelöscht wird nachdem die methode fertig ist
vielen Dank für eure hilfen!
Re: pointer delete in Methoden
Verfasst: 21. März 2012 17:09
von franzf
Aenni hat geschrieben:wenn ich den Pointer an der oben auskommentierten stelle lösche, dann wird der destruktor aufgerufen egal ob die methode fertig ist oder nicht. falls die methode noch nicht fertig ist, wird das objekt dennoch zerstört .
Das beantwortet leider die Frage nicht! Ist da irgend ein Thread involviert? Oder ist es einfach so, dass du das glaubst?
Zum Löschen kann man generell wenig sagen, denn über deine Klasse ist nichts bekannt. Kann ja sein, dass die automatisch gelöscht werden, z.B. durch einen evtl. nur versteckten parent in ner QObject-Hierarchie.
Re: pointer delete in Methoden
Verfasst: 23. März 2012 11:56
von RHBaum
Dein lifecycle ist natuerlich von der Methode doSth (tst2->doSth();) abhaengig ...
Ist die synchron (blockierend ..etc) dann sollte Sie fertig sein, wenn wenn du den fokus wieder bekommst. Du kannst dann danach löschen.
Ist sie assynchron, d.h. sie steosst nur irgendwas an, was Dein Object ne Weile braucht, die methode selber kehrt aber sofort zurueck ... dann hasst nen problem
Assynchron programiert man aber ganz anders ... event basiert ...
Man macht sowas meist mit nem manager, der die Objecte Verwaltet, aka sie anlegt, die Jobs startet, auf die finish events reagiert und da die ergebnisse Kopiert auswertet etc ... und dann auch die nicht mehr benoetigten Objecte loescht.
assynchrone Programmierung iss bissi ne andere Liga ...
Ciao ...
Re: pointer delete in Methoden
Verfasst: 29. März 2012 08:15
von Aenni
danke fuer die infos. bin nun schlauer.
asynchron auf einer sehr trivialen ebene zu programmieren erleichtert das ganze doch und der tip mit der verwalter klasse die das entsprechend handeld war sehr schön :=
@franzf du hattest recht es wurde ein process angestoßen den ich außer acht gelassen habe und somit der pointer noch verwendet wurde ...Merci!