πŸš€ go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: virtueller Destruktor mit =0 ?

#1214
From: Enno Sandner
Date: Tue, 09 Jan 1996 20:54
68 lines
3738 bytes
In article <4cu4it$675@news.Austria.EU.net> pauman@apars1.apa.co.at (Mario Paumann) writes:
	...

      > 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)

Mit Problem meinte ich eine Fehlermeldung - keine Warnungen. Warnungen sind
Compiler-abhaengig, z.B. koennte ein Compiler 'unsauber eingerueckte'
Programme mit Warnungen versehen.
Allerdings scheinen sich die Entwickler des HPUX Compilers wirkliche Muehe
gegeben zu haben auch aussergewoehnlichere Faelle zu beruecksichtigen.

      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.

Pure-virtual functions (pvf) dienen neben Modellierungs-Aspekten dazu das
Erzeugen von Instanzen einer bestimmten Klasse zu unterbinden. Wenn die Klasse
eine pvf hat, kann man keine Instanzen von ihr erzeugen.
BTW man kann generell, also nicht nur fuer Destruktoren, Implementierungen
fuer pvf anbieten.

      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;
   }                                         

Nein, das Bsp. Programm hat ebenfalls das Problem, dass der Destruktor von
'dein' den als pure-virtual deklarierten (+ nicht def.) Destruktor von 'mein'
aufrufen muesste. Das Programm sollte also nicht uebersetzbar sein.
g++ beschwert sich z.B. beim Linken, dass 'mein :: ~mein()' nicht vorhanden
ist. Mir ist kein portabler Weg bekannt, wie man den Aufruf der Basisklassen-
destruktoren unterdruecken koennte (mir war auch noch nie danach ... ;-).
Insofern muss der Destruktor von 'mein' definiert sein, falls von irgendwel-
chen Unterklassen von 'mein' Instanzen erzeugt werden sollen.

        Enno
Technical Details
Message-ID: <ENNO.96Jan9215404@kitz.inferenzsysteme.informatik.th-darmstadt.de>
Path: arc1-ca.pugleaf.net!news.th-darmstadt.de!news!enno
References: <4ctg28$t5o@news.Austria.EU.net> <4cu4it$675@news.Austria.EU.net>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.th-darmstadt.de!news!enno
From: enno@inferenzsysteme.informatik.th-darmstadt.de (Enno Sandner)
Newsgroups: de.comp.lang.c++
Subject: Re: virtueller Destruktor mit =0 ?
Date: 09 Jan 1996 20:54:01 GMT
Organization: Fachbereich Informatik, TH Darmstadt
Distribution: world
Message-ID: <ENNO.96Jan9215404@kitz.inferenzsysteme.informatik.th-darmstadt.de>
References: <4ctg28$t5o@news.Austria.EU.net> <4cu4it$675@news.Austria.EU.net>
NNTP-Posting-Host: kitz.intellektik.informatik.th-darmstadt.de
In-reply-to: pauman@apars1.apa.co.at's message of Tue, 09 Jan 96 22:21:07 GMT