new delete c++ c++11 override virtual-destructor

c++ destructor new delete



Anular identificador después de destructor en C++ 11 (3)

Como la salida del compilador te dice, debes marcar tu método const

class Derived : public Base { public: // ... virtual int Method() const override {} };

para anular el método en la clase base

¿El identificador de anulación después de la declaración del destructor virtual tiene algún significado especial?

class Base { public: virtual ~Base() {} virtual int Method() const {} }; class Derived : public Base { public: virtual ~Derived() override {} virtual int Method() override // error: marked override, but does not override - missing const {} };

El uso de un identificador de anulación en el método virtual es útil como comprobación: el compilador informará el error cuando el método virtual de base no esté sobreescrito.

¿Anular el destructor virtual tiene algún significado / función también?


No es una override que tiene un significado especial, sino el destructor mismo:

10.3 Funciones virtuales

6 / Aunque los destructores no son heredados, un destructor en una clase derivada anula un destructor de clase base declarado virtual; ver 12.4 y 12.5.

Si toma esto junto con la cláusula anterior:

5 / Si una función virtual está marcada con la anulación del especificador de virtudes y no anula una función miembro de una clase base, el programa está mal formado. [Ejemplo:

struct B { virtual void f(int); }; struct D : B { void f(long) override; // error: wrong signature overriding B::f void f(int) override; // OK };

-Final ejemplo]

se puede ver que si se destruye un destructor pero la clase base no tiene un destructor virtual , el programa está mal formado.


Sí. Si el destructor base no es virtual, la marca de override hará que el programa no se compile:

class Base { public: ~Base() {} }; class Derived : public Base { public: virtual ~Derived() override //error: ''~Derived'' marked ''override'' but does // not override any member functions {} };