[gelöst] pointer delete in Methoden

Alles rund um die Programmierung mit Qt
Antworten
Aenni
Beiträge: 79
Registriert: 15. Juli 2010 22:29

[gelöst] pointer delete in Methoden

Beitrag 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ß!
Zuletzt geändert von Aenni am 29. März 2012 08:15, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: pointer delete in Methoden

Beitrag 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?
Aenni
Beiträge: 79
Registriert: 15. Juli 2010 22:29

Re: pointer delete in Methoden

Beitrag 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!
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: pointer delete in Methoden

Beitrag 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.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: pointer delete in Methoden

Beitrag 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 ...
Aenni
Beiträge: 79
Registriert: 15. Juli 2010 22:29

Re: pointer delete in Methoden

Beitrag 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!
Antworten