scusa ho sbagliato termine.
Quindi mi confermi che anche se è protected, quindi la classe figlia può accedervi, se il decostruttore della classe figlia è vuoto, viene automaticamente chiamato anche il decostruttore della classe padre ed il puntatore viene deallocato?
Ma in teoria, se io definisco il metodo virtual, quello di Base non dovrebbe essere chiamato.
Cioè se io ho:
codice:
class Base{
public:
Base() {v = new double;}
virtual ~Base() {delete v;}
virtual int unMetodo() const {return 0;}
protected:
doulbe* v;
}
class Ereditata: public Base{
public:
Ereditata() : Base(){}
~Ereditata() {}
int unMetodo() const {return 1;};
}
int main(...)
{
Base* b = new Base();
Base* e = new Ereditata();
int x = b->unMetodo();
int y = e->unMetodo();
}
x vale 0 ed y vale 1, cioè il metodo della classe base non viene chiamato, in quanto virtuale. Il distruttore invece fa eccezione e viene chiamato comunque? In questo caso, l'oggetto e dealloca double* v?