2012-04-10 15 views
7

Supongamos que tengo una estructura con dos punteros cada uno apuntando a un objeto que tiene un destructor implementado. Suponga también que los puntos de la cabeza a una estructura NodoLista que tiene un valor no nulo * estudiantes y * siguiente:¿Eliminar el puntero de una estructura también eliminar punteros dentro de la estructura?

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

Si utilizo la palabra delete reserva en el NodoLista puntero 'cabeza' va a llamar a los destructores dentro de que estructura la clase de Estudiante y la clase de Listnode a la que 'estudiante' y 'siguiente' apuntan respectivamente. En otras palabras, eliminar * head también eliminar * student y * next siempre head era el único puntero a ese Listnode

Respuesta

10

No a menos que su destructor ~Listnode llame al delete en los punteros. Sin embargo, al llamar al delete, se invocarán los destructores de miembros que no sean punteros.

+0

¿Entonces puede implementar un destructor para una estructura? –

+2

@PatMurray ¡Absolutamente! Lo que sea que puedas hacer en una clase, también puedes hacerlo en una 'struct'. De hecho, la única diferencia es que los miembros de la clase antes de la primera declaración de acceso (público, privado o protegido) se consideran privados, mientras que los mismos miembros de una estructura se consideran públicos. – dasblinkenlight

+0

Las estructuras pueden heredar como clases, y el acceso de herencia predeterminado es público para struct y privado para las clases. Otra diferencia, pero en la misma línea. – MSalters

1

No, primero debe eliminarlos manualmente, pero también podría agregar los códigos de eliminación en el método destructor.

Cuestiones relacionadas