Article View: de.comp.lang.c++
Article #1209Re: virtueller Destruktor mit =0 ?
From: Mario Paumann
Date: Tue, 09 Jan 1996 22:21
Date: Tue, 09 Jan 1996 22:21
55 lines
2737 bytes
2737 bytes
Ok. Ich versuchs nochmal genauer zu erklaeren :
1. Es ist klar das diese Klasse (mein) eine abstrakte
Klasse ist dies ist gewollt und hier lag auch nicht
der Fehler (z.Hd. Markus Becker)
2. Bei Klassen die รผber Pointer der abstrakten Basisklasse
deleted werden, sollte nicht der Destruktor der Basis-
klasse sondern der von der abgeleiteten Klasse (hierzu
sind ja die virtuellen Destruktoren eingefuert worden)
aufgerufen werden (z.Hd. Joern Sierwald)
3. z.Hd. Enno Sandner : Du hast es erfasst :
> aller Basisklassen aufgerufen. Das obige Bsp. allein duerfte keine
> Probleme bereiten, im Gegensatz zu:
Das hab ich auch geglaubt, aber mein HPUX C++ Compiler
gibt mir dieses Warning
- CC: "TripService.h", line 38: warning: please provide an out-of-line
- definition: mein::~mein() {}; which is needed by
- derived classes (245)
Pure-virtual Functions sind ja dazu entwickelt worden, dass
man keinen Funktionsrumpf schreiben muss der eigenltich nichts
enthaelt, deshalb hab ich immer geglaubt dasz man ENTWEDER =0 ohne
Funktionsrumpf ODER Funktionsrumpf ohne =0 angibt.
Aber es geht anscheinend auch beides. D.h. man kann (und
wie die Fehlermeldung von oben auch zeigt VERLANGT mein
CC-Compiler das sogar) einen Funktionsrumpf fรผr eine
pure-virtual Function definieren.
Ausserdem hab ich angenommen, daร pure virtuelle Destruktoren
nichts ausmachen, da eine Klasse ja nicht unbedingt einen
Destruktor braucht. Aber um (wie oben schon angerissen)
eine Objekt ueber einen Pointer vom Typ der (abstrakten!)
Basisklasse zu deleten, muss diese Funktion auch in der
Basisklasse definiert werden (und zwar als virual).
So. Fertiggelabbert :)
Spezifikation hin oder her, theoretisch muesste sowas
ohne Probleme moeglich sein odrrr?
Schreibt mir doch bitte mal die Reaktionen von eueren Compilern
zu diesem Codestueck (dieses sollte direkt compilierbar sein) :
#include <iostream.h>
struct mein { virtual ~mein()=0; };
struct dein:mein { virtual ~dein(); };
dein::~dein() { cout << "~dein" << endl; }
main()
{ dein d;
return 0;
}
Danke, mario
Technical Details
Message-ID:
<4cu4it$675@news.Austria.EU.net>Path:
arc1-ca.pugleaf.net!Austria.EU.net!pctpg7References:
<4ctg28$t5o@news.Austria.EU.net>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!Austria.EU.net!pctpg7 From: pauman@apars1.apa.co.at (Mario Paumann) Newsgroups: de.comp.lang.c++ Subject: Re: virtueller Destruktor mit =0 ? Date: Tue, 09 Jan 96 22:21:07 GMT Organization: APA - Austrian Press Agency Message-ID: <4cu4it$675@news.Austria.EU.net> References: <4ctg28$t5o@news.Austria.EU.net> NNTP-Posting-Host: pctpg7.apa.co.at To: enno@intellektik.informatik.th-darmstadt.de Sierwald@tu-harburg.d400.de becker@zess.uni-siegen.de X-Newsreader: News Xpress Version 1.0 Beta #3