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


Anmelden zum Antworten