๐Ÿš€ go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: de.comp.lang.c++
Article #1209

Re: virtueller Destruktor mit =0 ?

#1209
From: Mario Paumann
Date: Tue, 09 Jan 1996 22:21
55 lines
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!pctpg7
References: <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