C'è un modo per distruggere una struttura (non una classe)?Posso distruggere una struttura in C++?
risposta
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.
Oppure lasciare che un oggetto esca dall'ambito chiamerà il distruttore. –
@ Martin: sì. vero. –
@ Martin: ma lasciare che un puntatore dell'oggetto non rientri nell'oscilloscopio non lo fa. È importante fare la distinzione. In questo esempio è un puntatore. –
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.
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;
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.
- 1. fread() una struttura in c
- 2. Come posso nascondere la dichiarazione di una struttura in C?
- 3. Come posso ottenere l'indirizzo di una struttura in C?
- 4. Come distruggere completamente una connessione socket in C
- 5. Casting una struttura C in un altro
- 6. Come restituire una struttura anonima in C?
- 7. Struttura locale in c
- 8. Distruggere un oggetto struct in C#?
- 9. Struttura C e struttura C++
- 10. Struttura vuota in C e struttura vuota in C++
- 11. come definire una struttura come in C
- 12. l'inizializzazione diretta di una struttura in C
- 13. dichiarazione anticipata di una struttura in C?
- 14. Che cos'è una struttura "compressa" in C?
- 15. Inizializzazione di una struttura globale in C
- 16. C++ come eliminare una struttura?
- 17. Passare una struttura all'API C++ utilizzando Marshal.StructureToPtr in C#
- 18. struttura vuota in C
- 19. iOS: Come posso distruggere un Singleton in ARC? Dovrei?
- 20. Struttura statica in C++
- 21. Posso nominare una tupla (definire una struttura?) In Scala 2.8?
- 22. C/C++: dati di riempimento o imbottitura in una struttura
- 23. Distruggere veramente una sessione PHP?
- 24. Posso definire una mappa la cui chiave è una struttura?
- 25. Come posso assegnare un valore predefinito a una struttura in una funzione C++?
- 26. Posso restituire una struttura inizializzata su una riga in ANSI C?
- 27. Come stampare una struttura C in modo ricorsivo in gdb
- 28. fornisce una dimensione extra di una struttura in C#
- 29. Passando una struttura a una funzione in C
- 30. definisce una struttura all'interno di una classe in C++
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