2010-08-17 22 views
17

C'è un modo per distruggere una struttura (non una classe)?Posso distruggere una struttura in C++?

+11

Domanda spaventosa, qual è l'immagine più grande? In genere non lo fai affatto (è una variabile automatica) o chiami 'delete' su di esso (è allocata dinamicamente.) Meglio non doverlo fare esplicitamente. In ogni altro caso, le strutture sono classi. – GManNickG

risposta

29

In C++ un struct è esattamente lo stesso come class con l'eccezione della visibilità predefinita sui membri e basi. Quindi, se esiste un modo per "distruggere" una classe, è possibile utilizzare lo stesso identico modo per "distruggere" una struttura.

Quindi, se avete un struct s { } nel vostro programma C++ si può fare questo:

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

Oppure lasciare che un oggetto esca dall'ambito chiamerà il distruttore. –

+0

@ Martin: sì. vero. –

+6

@ Martin: ma lasciare che un puntatore dell'oggetto non rientri nell'oscilloscopio non lo fa. È importante fare la distinzione. In questo esempio è un puntatore. –

9

Fatta eccezione per l'identificatore di accesso predefinito ("privata" per la classe, "pubblico" per struct), tutto il resto è lo stesso in classe e struct in C++. Quindi, SÌ, puoi scrivere e usare distruttori in struct nello stesso modo in cui viene fatto in classe.

5

Le strutture sono identiche alle classi tranne la visibilità predefinita e l'ereditarietà sono pubbliche (anziché private).

Così si può creare e distruggere le strutture proprio come questo (lo stesso come una classe, o costruito nel 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

le strutture e le classi sono la stessa cosa, c'è solo una differenza tecnica (la campo di accesso predefinito) che si verifica a causa di una differenza concettuale tra i due. Tuttavia ogni struct come una classe chiama i suoi costruttori quando gli oggetti devono essere creati, e il suo distruttore quando termina il suo campo di visibilità.

Nelle strutture C++ non sono meno potenti delle classi.

Problemi correlati