virtualer D'tor problem
-
hallo,
ich bin gerade auf ein Phänomen gestossen:
class CBase { public: ~CBase() {} <-- kein Semikolon }
und
class CBase { public: ~CBase() {}; <-- Semikolon }
funktionieren identisch, Compilier meckert auch nicht,
ist es ein Compilerbug oder unnötige Freiheit ?und da wir schon dabei sind habe ich noch eine Frage:
wieso kann ich D'ctor der Basisklasse nicht REINVIRTUAL machen ?class CBase { public: virtual ~CBase() = 0; <--*mecker* ..... }
class CDerived : public CBase { public: ~CDerived() { MessageBox(NULL, "Test", "Test", MB_OK); } ..... }
-
Zu erstens:
Ich glaube, bei der letzte Deklaration vor dem } kann immer das ; weggelassen werden - wenn es auch nicht sollte
-
Morgen,
Gast221212 schrieb:
Zu erstens:
Ich glaube, bei der letzte Deklaration vor dem } kann immer das ; weggelassen werden - wenn es auch nicht sollte
das kannst du machen wie du willst. Es macht keinen Unterschied.
wieso kann ich D'ctor der Basisklasse nicht REINVIRTUAL machen ?
Das geht aus dem Grunde nicht, als das es dann keinen DTor mehr fuer die Basis-
klasse mehr geben wuerde. Wer soll also diese zerstoeren, wenn es noetig sein
sollte? Ein virtueller DTor _muss_ immer implementiert werden.mfg
v R
-
Ein virtueller DTor _muss_ immer implementiert werden.
was das pure nicht ausschließt,weil es c++ soweit ich weis sogar erlaubt, dass man einer pure virtual funktion einen body verpasst(hat hume vor einiger zeit mal gesagt, muss ich nochmal im Forum stöbern,dann gibts nen link^^)
hier der link
in kurzform:
das ist erlaubt
struct Foo{ virtual ~Foo()=0; }; Foo::~Foo(){}//muss ausserhalb der Klasse sein
das nicht
struct Foo{ virtual ~Foo()=0{} }; //und das erstrecht nicht struct Foo{ virtual ~Foo()=0; };
-
du meinst bestimmt das tut von shade
http://tutorial.schornboeck.net/pure_virtual.htm
-
ne, meinte schon was heir ausm forum
-
was das pure nicht ausschließt,weil es c++ soweit ich weis sogar erlaubt, dass man einer pure virtual funktion einen body verpasst(hat hume vor einiger zeit mal gesagt, muss ich nochmal im Forum stöbern,dann gibts nen link^^)
Das wusste ich wiederum noch nicht :). Heisst also, ich kann den DTor pure
virtuell deklarieren und verhindere dadurch die Instanziierung der Basisklasse
und muss natuerlich diesen definieren.Gut das zu wissen
mfg
v R