Salve a tutti, sto facendo dei test ma la situazione non mi è molto chiara.
Supponiamo di avere
codice:
class Base{
public:
     Base() {v = new double;}
     virtual ~Base() {delete v;}
      void unMetodo() =0;
     //più costruttore di copia, operatore assegnamento, eccetera
protected:
     doulbe* v;
}

class Ereditata: public Base{
public:
     Ereditata() : Base(){}
     ~Ereditata() {  //non ci scrivo niente }
     double nuovoMetodo(int i) const;
}
Da quello che ho capito e che mi risulta effettivamente dai test quando chiamo il distruttore della classe figlia viene chiamato anche quello della classe padre, quindi se per caso io scrivessi
codice:
~Ereditata() {  delete v;}
lo cancellerei due volte?
Non riesco a trovare questa informazione espressa in modo esplicito da alcuna parte, la cosa che mi inghippa è il "virtual", in teoria se metto virtual nella classe padre, il distruttore della classe padre non dovrebbe essere invocato giusto? O vengono comunque invocati entrambi?

Se nella classe figlia non inserisco puntatori fra le proprietà, e tolgo il virtual dal distruttore della classe padre, *v verrà cancellato perchè verrà invocato automaticamente ~Base() ?