Classi derivate e distruttori

di il
1 risposte

Classi derivate e distruttori

Salve a tutti è il mio primo post qui
iniziamo con una domanda facile facile:

diciamo che ho una classe Base e una classe Derivata che eredita dalla base, e per entrambe ho scritto costruttori e distruttori.

se io in una Terza classe dichiaro un membro

Base* pBase;

e nel costruttore della terza classe lo inizializzo così:

pBase = new Derivata();

e nel distruttore lo distruggo cosi':

delete pBase;

Ora, quando nel main dichiaro

Terza terza;

viene eseguito il costruttore della classe Terza -
in cui viene creato il puntatore pBase e viene eseguito quindi il costruttore della classe Base;
e infine quello della classe Derivata (poichè è creato attraverso new Derivata).

e ok.

Quando l'oggetto terza viene distrutto, viene eseguito il distruttore:
- della classe Base (visto che è pBase è un puntatore di tipo Base*)
- quello della classe Terza
ed in effetti il distruttore di Derivata non viene mai eseguito! Poichè appunto pBase è dichiarato di tipo Base* (ma è effettivamente inizializzato come Derivata).

Ordunque... io ho bisogno di avere un puntatore a questo oggetto, che potrebbe essere appartenente a una qualsiasi delle classi che derivano da Base.

Immagino che sia un problema il fatto di non poter distruggere eventuali puntatori che siano dichiarati nelle classi derivate. Oppure vengono distrutti automaticamente? Oppure come si fa in questi casi?

1 Risposte

  • Re: Classi derivate e distruttori

    Ciao, non sono d'accordo con la tua affermazione...La costruzione dell'oggetto segue le fasi che
    hai indicato, ma la distruzione dovrebbe chiamare,
    0. il distruttore di Terza
    1. il distruttore della classe Derivata
    2. il distruttore della classe Base

    Ho provato, per sicurezza, sia con VC++ che con Builder C++ ed il comportamento è
    questo...(a meno che io non abbia capito male il giro)
Devi accedere o registrarti per scrivere nel forum
1 risposte