template <class T>
class Stack
{
public:
Stack(int = 10) ;
~Stack() { delete [] stackPtr ; } //<--- What does the "~" signify?
int push(const T&);
int pop(T&) ;
int isEmpty()const { return top == -1 ; }
int isFull() const { return top == size - 1 ; }
private:
int size ;
int top ;
T* stackPtr ;
} ;
Répondre
Il est le destructeur, il détruit l'instance, libère de la mémoire, etc., etc.
est ici une description de ibm.com:
Destructeurs sont généralement utilisés pour désaffecter la mémoire et faire autre nettoyage pour un objet de classe et ses membres de classe lorsque l'objet est détruit. Un destructeur est appelé pour un objet de classe lorsque cet objet est hors de portée ou est explicitement supprimé.
Voir https://www.ibm.com/support/knowledgecenter/SSB27U_5.4.0/com.ibm.zos.r9.cbclx01/cplr380.htm
Ceci est un destructor. Il est appelé lorsque l'objet est détruit (hors de la portée de la vie ou supprimé). Pour être clair, vous devez utiliser ~ NameOfTheClass comme pour le constructeur, les autres noms ne sont pas valides.
"les autres noms sont-ils valides"? –
Vieille réponse ... Je pense que je voulais dire qu'après ~ ça pourrait être n'importe quel nom aussi longtemps que c'est le même que le nom de la classe et le nom du constructeur. – Klaim
C'est un destructeur. La fonction est garantie d'être appelée lorsque l'objet est hors de portée.
... si elle est allouée sur la pile.Lorsque 'delete' est appelé sur l'objet s'il est alloué sur le tas. – Jherico
@Jherico: C'est en fait le mot-clé "delete" qui est utilisé. Rappelez-vous que le mot-clé "new" invoque "operator new" et appelle ensuite le constructeur sur l'adresse retournée afin qu'il soit parfaitement possible de "nouveau" mémoire sur la pile. :) Le mot-clé "delete" appelle le destructeur et appelle ensuite "operator delete". – Troubadour
@Jherico ou vit à l'étendue de l'espace de noms ou est un membre de classe statique ou une variable statique fonction-locale: la durée de stockage statique. En d'autres termes: tous les vairables avec stockage automatique seront automatiquement détruits, le cas échéant. Méfiez-vous de [Static Initialization Order Fiasco] (http://stackoverflow.com/a/1005709/85371) – sehe
Ce serait le destructor (libérant une mémoire dynamique)
Comme d'autres l'ont noté, dans l'instance que vous demandez à ce sujet est le destructor pour class Stack
.
Mais prendre votre question exactement comme il apparaît dans le titre:
en C++ ce qui fait un tilde « ~ » avant un nom de fonction signifie?
il existe une autre situation. Dans tous les contextes sauf immédiatement avant le nom d'une classe (qui est le contexte du destructeur), ~
est son opérateur complémentaire (ou bitwise non). Pour être sûr qu'il ne vient pas très souvent, mais vous pouvez imaginer un cas comme
if (~getMask()) { ...
qui ressemble, mais a un sens très différent.
- 1. Que signifie le tilde devant un nom de fonction en C#?
- 2. Que signifie le symbole @ devant un nom de variable en C#?
- 3. Comment écrire un Tilde normal (~) en C#?
- 4. En C, que signifie "public" lorsqu'il est placé devant une variable globale?
- 5. Que signifie "() =>" en C#?
- 6. Que signifie Chaîne * en C#?
- 7. Que signifie un tableau $ # en Perl?
- 8. Que signifie cmd/C?
- 9. Que signifie "(void) new" en C++?
- 10. Que signifie «Nil» en Obj-C?
- 11. Que signifie "FunctionName (bool() args)" en C#?
- 12. Que signifie l'opérateur C# =>?
- 13. C++ - Que signifie "Stack automatique"?
- 14. que signifie le mappage de table un à un?
- 15. Que signifie border dans la fonction glTexImage2D?
- 16. Insérer un nom de fonction pendant PreBuild
- 17. Que signifie être un thread démon?
- 18. Que signifie "EGPCS" en PHP?
- 19. Qu'est-ce que cela signifie d'instancier un objet en utilisant des accolades en C++?
- 20. Que signifie utiliser setDelegate: sur un UIViewController?
- 21. Que signifie "==="?
- 22. Que signifie "=>" en PHP?
- 23. Qu'est-ce que cela signifie? Nom public {get; set;}
- 24. Que signifie * PIPER en Perl?
- 25. Comment convertir un nom de fonction en une chaîne
- 26. Regex - Faire correspondre un motif devant un personnage
- 27. Que signifie le symbole & dans Objective-C?
- 28. Que signifie avoir deux astérisques ** en Objective-C?
- 29. Python: Passer un nom de classe en tant que paramètre à une fonction?
- 30. Que signifie! == opérateur de comparaison en PHP?
~ est l'opérateur de négation au niveau du bit. Lorsqu'il est appliqué à une définition de fonction, cela signifie que la fonction fera le * contraire * de ce qu'elle dit qu'elle va faire - par exemple, '~ push()' apparaîtra vraiment dans la pile, et '~ writeSeriousComment()' produira effectivement des commentaires comme celui-ci. –
Pour le genre de personne qui semble afficher la plupart des questions C++ sur ce site, n'essayez pas de lire le commentaire de j_random_hacker. – Alan
pour le bénéfice des personnes qui ont le sens de l'humour (et quelques connaissances de base en programmation) DO essayer de lire le commentaire de j_random_hacker. –