Hallo liebe Leute.
Folgende Überlegung:
Ich hab folgende Architektur:
Parent <- Child
Wenn ich jetzt Objekte vom Typ Child erstelle.
Child* pChild = new Child();
Und dann irgendwo mal das Caste - aus programmier technischen Gründen.
Parent* pParent = (Parent*)pChild;
Und dann:
delete pParent;
ausführe. Wird dann der komplett belegte Speicher gelöscht, was pChild belegt? Oder fliegt mir dann die Applikation um die Ohren?
Vielen Dank.
Bis dann
Jakob
delete -> Oberklasse -> geht das gut?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
noch ne Anmerkung dazu:
Klassen, die keinerlei virtuelle methoden haben, sollt man ned ableiten.
Hat eine klasse mindestens eine virtuelle methode neben dem DTOR, macht es technisch keinen Sinn, den DTOR nicht virtuell zu machen.
D.h. das vorhandensein des virtuellen destrukturs ist eigentlich ein indikator fuer, ob man fuer ne klasse ableiten darf (vom entwickler vorgesehen) oder ned.
Folgerung: Klasse zum ableiten vorgesehen = virtueller Dtor = du kannst bedenkenlos die instanz ueber einen basisklassenzeiger loeschen.
BTW:
"Parent"-"Child" ist bei GUI basierten Anwendungen ne ganz schlechte Idee fuer "Benamsung", wenn du vererbung damit darstellen willst. Bei Guis wird mit parent-Child meist die hirarische Fenster-Struktur beschrieben, was nix mit ableitung zu tun hat ....
Klassen, die keinerlei virtuelle methoden haben, sollt man ned ableiten.
Hat eine klasse mindestens eine virtuelle methode neben dem DTOR, macht es technisch keinen Sinn, den DTOR nicht virtuell zu machen.
D.h. das vorhandensein des virtuellen destrukturs ist eigentlich ein indikator fuer, ob man fuer ne klasse ableiten darf (vom entwickler vorgesehen) oder ned.
Folgerung: Klasse zum ableiten vorgesehen = virtueller Dtor = du kannst bedenkenlos die instanz ueber einen basisklassenzeiger loeschen.
BTW:
"Parent"-"Child" ist bei GUI basierten Anwendungen ne ganz schlechte Idee fuer "Benamsung", wenn du vererbung damit darstellen willst. Bei Guis wird mit parent-Child meist die hirarische Fenster-Struktur beschrieben, was nix mit ableitung zu tun hat ....
Vielen Dank für die Antworten.
Ich hab das nicht bei mir so im Quellcode stehen ^^.
Wollte das Allgemein wissen, unabhängig zu Qt.
In meinem Fall triffts die Qt Komponenten "QGraphicsItem" und deren abgeleiteten Klassen.
Parent & Child sind nciht wirklich aussagekräftig um daraus abzuleiten was die so machen ^^.
Danke nochmal.
Einen schönen Tag noch.
Grüße
Ich hab das nicht bei mir so im Quellcode stehen ^^.
Wollte das Allgemein wissen, unabhängig zu Qt.
In meinem Fall triffts die Qt Komponenten "QGraphicsItem" und deren abgeleiteten Klassen.
Parent & Child sind nciht wirklich aussagekräftig um daraus abzuleiten was die so machen ^^.
Danke nochmal.
Einen schönen Tag noch.
Grüße
-
graythornWW
- Beiträge: 38
- Registriert: 20. Oktober 2008 09:48
Code: Alles auswählen
Hat eine klasse mindestens eine virtuelle methode neben dem DTOR, macht es technisch keinen Sinn, den DTOR nicht virtuell zu machen.