2010-08-17 17 views
17

¿Hay alguna manera de destruir una estructura (no una clase)?¿Puedo destruir una estructura en C++?

+11

Pregunta aterradora, ¿cuál es la imagen más grande? En general, no lo hace en absoluto (es una variable automática) o llama a 'eliminar' en él (se asigna dinámicamente. Es mejor no tener que hacerlo explícitamente). En cualquier otro caso, las estructuras son clases. – GManNickG

Respuesta

29

En C++ un struct es exactamente lo mismo que un class a excepción de la visibilidad predeterminada en los miembros y bases. Entonces, si hay una forma de "destruir" una clase, puedes usar la misma manera para "destruir" una estructura.

lo tanto, si usted tiene un struct s { } en su programa en C++ se puede hacer esto:

s *v = new s(); 
delete v; // will call structure's destructor. 
+10

O simplemente dejar que un objeto se salga del alcance llamará al destructor. –

+0

@Martin: sí. cierto. –

+6

@Martin: pero dejar caer un puntero de objeto fuera del alcance no lo hace. Es importante hacer la distinción. En este ejemplo, es un puntero. –

9

Excepto por el especificador de acceso predeterminado ("privado" para la clase, "público" para la estructura), todo lo demás es lo mismo en clase C++ y struct. Entonces, SÍ, puede escribir y usar destructores en struct de la misma manera que se hace en clase.

5

Las estructuras son idénticas a las clases, excepto que la visibilidad y la herencia predeterminadas son públicas (en lugar de privadas).

para que pueda crear y destruir estructuras como ésta (lo mismo que una clase, o incorporado en el tipo):

// Create on the heap, need to manually delete. 
MyStruct *const pStruct = new MyStruct(); 
delete pStruct; 

// Created on the stack, automatically deleted for you. 
MyStruct struct; 
2

Las estructuras y las clases son la misma cosa, sólo hay una diferencia técnica (la campo de acceso predeterminado) que ocurre debido a una diferencia conceptual entre los dos. Sin embargo, cada estructura como una clase llama a sus constructores cuando los objetos deben ser creados, y su destructor cuando termina su campo de visibilidad.

En C++ las estructuras no son menos poderosas que las clases.