2012-04-10 9 views
7

Si supponga di disporre di una struttura con due puntatori ciascuno che punta a un oggetto con un distruttore implementato. Anche supporre che i punti della testa a una struttura Listnode che ha un valore non NULL * studenti e * prossimo:L'eliminazione di un puntatore di una struttura cancellerà anche i puntatori all'interno della struttura?

struct Listnode {  
    Student *student; 
    Listnode *next; 
}; 
Listnode *head = new Listnode; 

Se uso la parola delete di riserva sul puntatore Listnode 'testa' intende invitare i distruttori entro che struttura la classe Student e la classe Listnode che rispettivamente "studente" e "successivo" puntano. In altre parole, cancellerà * head anche delete * student e * next head fornito era l'unico puntatore a quel Listnode

risposta

10

A meno che il distruttore ~Listnode non chiami delete sui puntatori. Chiamando delete, tuttavia, si invocano i distruttori dei membri non puntatori.

+0

Quindi è possibile implementare un distruttore per una struttura? –

+2

@PatMurray Assolutamente! Qualunque cosa tu possa fare in una classe, puoi farlo anche in una 'struct'. Infatti, l'unica differenza è che i membri della classe prima della prima dichiarazione di accesso (pubblica, privata o protetta) sono considerati privati, mentre gli stessi membri di una struct sono considerati pubblici. – dasblinkenlight

+0

Le strutture possono ereditare come classi e l'accesso ereditario predefinito è pubblico per struct e private per le classi. Un'altra differenza, ma lungo le stesse linee. – MSalters

1

No, dovresti eliminarli manualmente prima, ma potresti anche aggiungere i codici di cancellazione nel metodo distruttore.

Problemi correlati