Distruttore astratto

sdrabb1
ciao a tutti esercitandomi mi sono imbattuto in un es dove si dichiara un distruttore astratto qualcuno potrebbe spiegarmi cosa questo significhi e come ci si comportasulle classi che dalla classe basse dove è dichiarato questo derivano?
questo è il codice:
Myclass
{
virtual ~myclass()=0;
virtual void stampa()=0;
};

ringrazio anticipatamente :-D :-D :-D :-D :-D

Risposte
claudio862
Quello non è il codice. Mostra l'esempio completo.
In generale, un distruttore devi comunque definirlo, altrimenti non puoi usare quella classe (sì, si possono definire anche funzioni virtuali pure). Qui (seconda risposta) dicono che uno degli utilizzi del distruttore virtuale puro è quello di indicare a colpo d'occhio che una classe è astratta (invece che scorrere l'elenco delle funzioni membro di tale classe e delle classi da cui deriva, si guarda subito il distruttore). Può anche essere usato per rendere astratta una classe senza alcuna funzione.

Vitalluni
L'utilità del distruttore astratto è quella di cancellare un'istanza della classe "Derivata" usando solo un puntatore alla classe base (distruzione polimorfica).
Se pensi di utilizzare il puntatore alla classe base (virtuale) allora il distruttore virtuale è obbligatorio(lo è solo se lo cancelli, ma è meglio metterlo e non averne bisogno che non metterlo e poi andare a capire da dove è uscito un bug, secondo lo standard se cancelli un puntatore a una classe base senza distruttore astratto il risultato è undefined.. ovvero Dio solo sa cosa succede)

claudio862
"Vitalluni":
L'utilità del distruttore astratto è quella di cancellare un'istanza della classe "Derivata" usando solo un puntatore alla classe base (distruzione polimorfica).
Se pensi di utilizzare il puntatore alla classe base (virtuale) allora il distruttore virtuale è obbligatorio(lo è solo se lo cancelli, ma è meglio metterlo e non averne bisogno che non metterlo e poi andare a capire da dove è uscito un bug, secondo lo standard se cancelli un puntatore a una classe base senza distruttore astratto il risultato è undefined.. ovvero Dio solo sa cosa succede)

Questo vale per un distruttore virtuale. Un distruttore astratto è automaticamente anche virtuale, ma oltre a questo rende la classe astratta, cioè non è possibile istanziare variabili di quella classe (ma solo di classi derivate).

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.