2009-06-16 23 views
7

Se definiamo una classe astratta che ha un distruttore virtuale puro, perché dobbiamo dare una definizione di un distruttore nella classe astratta?Domanda sul distruttore virtuale puro

+0

Duplicate http://stackoverflow.com/questions/630950/pure-virtual-destructor-in-c – ralphtheninja

risposta

15

Il distruttore per la classe base deve essere chiamato quando l'oggetto viene distrutto, quindi necessita di una definizione.

9

Come indicato da Jesse, i distruttori ereditati vengono sempre chiamati (vengono chiamati dal compilatore senza alcun modo per sovrascrivere questo comportamento), quindi è ovvio che un distruttore virtuale deve avere un'implementazione. Quindi, se un distruttore virtuale puro deve avere un'implementazione, qual è la differenza tra un distruttore virtuale puro e un distruttore virtuale normale? Se la tua classe astratta ha solo dichiarato il distruttore virtuale e nessun altro metodo virtuale puro, rendere puro il distruttore impedirà a qualcuno di essere in grado di creare un'istanza della classe astratta.

3

Solo un operatore virtuale può essere dichiarato come puro. Ma poi, dato che aggiungi una dichiarazione, devi implementare il corpo del dtor. Come già accennato, i distruttori chiamano il loro genitore, fino alla catena dell'eredità.

9

perché lo standard dice così:

12.4.7 un distruttore può essere dichiarata virtuale (10.3) o di pura virtuale (10.4); se nel programma vengono creati oggetti di tale classe o classe derivata, deve essere definito il distruttore.

Il motivo è che viene chiamato esplicitamente quando un oggetto di una classe derivata viene distrutto.

puoi anche consultare le risposte alla mia domanda precedente: Under what circumstances is it advantageous to give an implementation of a pure virtual function?

+0

Cosa c'è di sbagliato in questa risposta? O COSÌ, per quello? – Tobias

+1

Non è corretto dire che è chiamato "esplicitamente". È stato utile che tu abbia fatto riferimento allo standard, ma dovresti modificare la tua risposta in modo che sia formalmente più corretta. "esplicitamente" è l'opposto di come normalmente vengono chiamati i distruttori. – nobar

Problemi correlati