Salve a tutti, sto facendo dei test ma la situazione non mi è molto chiara.
Supponiamo di avere
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 scrivessicodice: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; }
lo cancellerei due volte?codice:~Ereditata() { delete v;}
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() ?