2010-08-17 7 views
17

Y at-il un moyen de détruire une structure (pas une classe)?Puis-je détruire une structure en C++?

+11

Question effrayante, quelle est la plus grande image? Vous ne faites généralement pas du tout (c'est une variable automatique) ou vous appelez "delete" (il est dynamiquement alloué, mieux vaut ne pas le faire explicitement). Dans tous les autres cas, les structures sont des classes. – GManNickG

Répondre

29

Dans C++ un struct est exactement la même que celle d'un class à l'exception de la visibilité par défaut sur les membres et les bases. Donc, s'il existe un moyen de "détruire" une classe, vous pouvez utiliser exactement la même méthode pour "détruire" une structure.

Donc, si vous avez un struct s { } dans votre programme C++, vous pouvez le faire:

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

Ou tout simplement laisser un objet tomber hors de portée appellera le destructeur. –

+0

@Martin: oui. vrai. –

+6

@Martin: mais ne pas laisser un pointeur d'objet tomber hors de portée. C'est important de faire la distinction. Dans cet exemple, c'est un pointeur. –

9

Sauf pour le prescripteur d'accès par défaut (« privée » pour la classe, pour struct « public »), tout le reste est même dans C++ class et struct. Donc, OUI, vous pouvez écrire et utiliser des destructeurs dans struct de la même manière qu'en classe.

5

Les structures sont identiques aux classes sauf que la visibilité par défaut et l'héritage sont publics (plutôt que privés).

Ainsi, vous pouvez créer et détruire struct comme celle-ci (même en tant que classe, ou un type construit):

// 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

Structs et les classes sont la même chose, il y a juste une différence technique (champ d'accès par défaut) qui se produit en raison d'une différence conceptuelle entre les deux. Cependant chaque structure comme une classe appelle ses constructeurs quand les objets doivent être créés, et son destructeur quand son champ de visibilité se termine.

En C++, les structs ne sont pas moins puissants que les classes.