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:
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?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(); }

Rispondi quotando