In c++ wat een tilde “~” voor de naam van een functie betekenen?

 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 ;  
 } ;
InformationsquelleAutor Monte Hurd | 2009-09-08

 

6 Replies
  1. 137

    Het is de vernietiger, vernietigt het de aanleg, maakt geheugen vrij, enz. enz.

    Hier is een beschrijving van ibm.com:

    Destructors worden meestal gebruikt voor het opheffen van het geheugen en andere schijfopruiming voor een klasse object en de leden van de klas wanneer het object wordt vernietigd. Een destructor wordt aangeroepen voor een klasse-object wanneer het object gaat uit van de scope of is verwijderd.

    Zie https://www.ibm.com/support/knowledgecenter/SSB27U_5.4.0/com.ibm.zos.r9.cbclx01/cplr380.htm

  2. 67

    Zoals anderen al hebben opgemerkt, in het geval u vragen over het is de destructor voor class Stack.

    Maar nemen uw vraag precies zoals het wordt weergegeven in de titel:

    In c++ wat een tilde “~” voor de naam van een functie betekenen?

    er is een andere situatie. In welke context behalve onmiddellijk vóór de naam van een klasse (de destructor context), ~ is de one ‘ s complement (bitsgewijze of niet) operator. Om zeker te zijn dat het komt niet heel vaak, maar je kunt je voorstellen dat in een geval als

    if (~getMask()) { ...

    die ziet er hetzelfde uit, maar heeft een heel andere betekenis.

  3. 7

    Het is een destructor. De functie is gegarandeerd worden genoemd wanneer het object gaat uit van de scope.

    • …als zijn toegewezen op de stapel. Wanneer ‘verwijderen’ wordt genoemd op het object als de toegewezen op de heap.
    • Eigenlijk is het wanneer het zoekwoord “delete” wordt gebruikt. Vergeet niet dat het zoekwoord “nieuwe” roept “nieuwe operator” en dan roept de constructor op het adres geretourneerd dus het is perfect mogelijk om “nieuwe” memory op de stapel. 🙂 Het trefwoord “verwijderen” roept de destructor en dan roept “operator delete”.
    • of leven in de naamruimte scope of een statische klasse lid of functie-lokale statische variabele: de statische opslag duur. In andere woorden: alle vairables met automic opslag automatisch worden vernietigd als dat nodig is. Pas op met Statische Initialisatie Om Fiasco
  4. 4

    Dit is een destructor. Het heet wanneer het object wordt vernietigd (uit het leven scope of verwijderd).

    Om duidelijk te zijn, moet u gebruik ~NameOfTheClass als voor de aannemer, de andere namen zijn ongeldig.

    • “andere namen zijn geldig”?
    • Oude antwoord… ik denk dat ik bedoelde dat na ~ het kan ook een andere naam zo lang is dezelfde als de naam van de klasse en constructor naam.
  5. 2

    Het is de destructor. Deze methode wordt aangeroepen als de instantie van de klasse wordt vernietigd:

    Stack<int> *stack= new Stack<int>;
    //do something
    delete stack; //<- destructor is called here;
    • Er is een * ontbreekt.
    • hop.. bedankt 🙂

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *