Il seguente codice potrebbe ancora essere influenzato negativamente dalla mancanza di ereditarietà virtuale?L'ereditarietà virtuale è ancora necessaria quando le classi di base non contengono membri di dati?
Se è così, sarebbero gli effetti negativi essere lo stesso (o così male come) gli effetti negativi di ereditarietà multipla senza eredità virtuale se class A
ha contenere membri di dati?
class A
{
public :
virtual ~A () { }
virtual int foo () const = 0 ;
} ;
class B : public A
{
public :
virtual ~B () { }
} ;
class C : public A
{
public :
virtual ~C () { }
} ;
class D : public B , public C
{
public :
virtual int foo () const { return 12 ; }
} ;
E sembra [come si ha bisogno del 'virtual' vedere qui] (http://coliru.stacked-crooked.com/view?id=8bd2970b897e9b44), ovvero se si prevede che un puntatore a A derivato da B abbia lo stesso valore come se fosse derivato da C. – Niall
in questo modo, devi dichiarare un distruttore virtuale con un'implementazione vuota in A. Vedi http://stackoverflow.com/questions/461203/when-to-use-virtual-destructors – Notinlist
@Notinlist Grazie per la cattura. Ho aggiunto i distruttori virtuali ad A, B e C per sicurezza. – Giffyguy