Article View: de.comp.lang.c++
Article #1249Re: virtueller Destruktor mit =0 ?
From: Enno Sandner
Date: Fri, 12 Jan 1996 12:32
Date: Fri, 12 Jan 1996 12:32
59 lines
2631 bytes
2631 bytes
Nico Josuttis wrote:
>
> ...
>
> Mich irritiert allerdings voellig, dass in einigen Antworten
> angedeutet wird, eine irgendwie geartete Definition mit "=0"
> koennte moeglich sein.
> Ich halte das fuer falsch, habe es aber nicht anhand vom Standard
> nachgeprueft.
>
Fuer den pure-virtual Destruktor steht das unter 12.4 [class.dtor]
des DWP:
6 ... A destructor can be declared virtual (_class.virtual_) or
pure virtual (_class.abstract_); if any objects of that class or
any derived class are created in the program, the destructor
shall be defined. ...
Fuer Member-Functions liefert 10.3 [class.virtual] die Rechtfertigung:
8 A virtual function declared in a class shall be defined, or declared
pure (_class.abstract_) in that class, or both; but no diagnostic is
required (_basic.def.odr_).
Ueber den Sinn eines solchen Features laesst sich sicherlich streiten.
Man koennte es z.B. dazu verwenden, um Teilen der von Funktionen in
einem Interface ein 'Default-Verhalten' zuzuordnen:
lib.H:
struct AnyItf {
virtual void some_func()=0;
};
inline void AnyItf :: some_func() { /* Default-Verhalten */ }
client.C:
#include "lib.H"
struct SomeImpl : AnyItf {
void some_func() {
AnyItf :: some_func();
/* Zusaetzliche Funktionalitaet */
}
};
...
Dabei sei 'lib.H' das Headerfile einer Bibliothek und 'client.C' ein
Nutzer dieser Bibliothek. Der springende Punkt dabei ist, dass die
Definition des Default-Verhaltens, ins Headerfile gehoert (zumindest
deren Deklaration). Ansonsten koennte der Benutzer nicht ahnen, dass
eine Implementierung fuer 'some_func' angeboten wird.
(Eine alternative Lsg. zum obigen Szenario waere es, 'some_func' nicht als
pure zu deklarieren und irgendeine Dummy (pure-virtual) Funktion einzufuehren,
die dann garantiert, dass die Klasse abstrakt ist.)
Unter diesen Rahmenbedingungen laesst sich dieses Feature vielleicht
vernuenftig einsetzen.
Enno
Technical Details
Message-ID:
<30F654D4.1CFBAE39@intellektik.informatik.th-darmstadt.de>Path:
arc1-ca.pugleaf.net!news.th-darmstadt.de!newsReferences:
<4ctg28$t5o@news.Austria.EU.net> <4cu4it$675@news.austria.eu.net> <DL2BM9.1pG@bredex.de>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!news.th-darmstadt.de!news From: Enno Sandner <enno@intellektik.informatik.th-darmstadt.de> Newsgroups: de.comp.lang.c++ Subject: Re: virtueller Destruktor mit =0 ? Date: Fri, 12 Jan 1996 13:32:20 +0100 Organization: Fachbereich Informatik, TH Darmstadt Message-ID: <30F654D4.1CFBAE39@intellektik.informatik.th-darmstadt.de> References: <4ctg28$t5o@news.Austria.EU.net> <4cu4it$675@news.austria.eu.net> <DL2BM9.1pG@bredex.de> NNTP-Posting-Host: kitz.intellektik.informatik.th-darmstadt.de Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit X-Mailer: Mozilla 2.0b4 (X11; I; SunOS 4.1.3 sun4m)