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 ;
} ;
Antwort
Es ist die destructor, es die Instanz zerstört, entlastet Speicher usw. usw.
Hier eine Beschreibung von ibm.com ist:
Destruktoren werden in der Regel freizugeben Speicher und tun andere Bereinigungen verwendet für ein Klassenobjekt und seine Klassenmitglieder, wenn das Objekt zerstört wird. Ein Destruktor wird für ein Klassenobjekt aufgerufen, wenn dieses Objekt den Gültigkeitsbereich überschreitet oder explizit gelöscht wird.
Siehe https://www.ibm.com/support/knowledgecenter/SSB27U_5.4.0/com.ibm.zos.r9.cbclx01/cplr380.htm
Dies ist ein destructor ist. Es wird aufgerufen, wenn das Objekt zerstört wird (außerhalb des Gültigkeitsbereichs oder gelöscht).
klar sein, müssen Sie ~ NameOfTheClass verwenden wie für den Konstruktor, andere Namen sind ungültig.
"andere Namen sind gültig"? –
Alte Antwort ... Ich glaube ich meinte, dass nach ~ es ein beliebiger Name sein könnte, solange es der Klassenname und der Konstruktorname ist. – Klaim
Es ist ein destructor. Die Funktion wird garantiert aufgerufen, wenn das Objekt den Gültigkeitsbereich verlässt.
... wenn es auf dem Stapel zugeordnet ist.Wenn 'delete' für das Objekt aufgerufen wird, wenn es auf dem Heap zugeordnet ist. – Jherico
@Jherico: Eigentlich ist es, wenn das Schlüsselwort "löschen" verwendet wird. Denken Sie daran, dass das Schlüsselwort "new" "operator new" aufruft und dann den Konstruktor auf die zurückgegebene Adresse aufruft, so dass es vollkommen möglich ist, "neuen" Speicher auf dem Stapel zu speichern. :) Das Schlüsselwort "delete" ruft den Destruktor auf und ruft dann "operator delete" auf. – Troubadour
@Herico oder lebt im Namespace-Bereich oder ist ein statisches Klassenmitglied oder eine funktionale lokale statische Variable: die statische Speicherdauer. Mit anderen Worten: Alle Variablen mit automatischem Speicher werden _automatisch_ bei Bedarf zerstört. Vorsicht vor [Statischer Initialisierungsauftrag Fiasko] (http://stackoverflow.com/a/1005709/85371) – sehe
Das ist der destructor würde (zu befreien jeden dynamischen Speicher up)
Wie andere erwähnt haben, in dem Fall, Sie fragen, darüber der destructor für class Stack
ist.
Aber nehmen Sie Ihre Frage genau so, wie es im Titel erscheint:
in C++, was eine Tilde bedeutet „~“, bevor ein Funktionsnamen bedeuten?
gibt es eine andere Situation. In jedem Kontext außer unmittelbar vor dem Namen einer Klasse (der destructor Kontext ist), ~
das Einerkomplement (oder bitweise nicht) Operator. Um sicherzustellen, dass es nicht sehr oft kommen, aber Sie können einen Fall wie
if (~getMask()) { ...
vorstellen, die ähnlich aussehen, haben aber eine ganz andere Bedeutung.
- 1. Was bedeutet die Tilde vor einem Funktionsnamen in C#?
- 2. Was bedeutet Symbol Tilde (~) in CSS
- 3. Was bedeutet doppelte Tilde (~~) in Java?
- 4. Was bedeutet @ vor Variabe in C#?
- 5. Was bedeutet "#" vor einem Tabellennamen in TSQL?
- 6. Was bedeutet „~“ bedeutet vor Aufzählungen
- 7. Was bedeutet "out" vor einem generischen Typparameter?
- 8. Was bedeutet $ vor einer Zeichenkette?
- 9. Was bedeutet Schrägstrich und Tilde in bash vor dem Namen des Home-Verzeichnisses?
- 10. Was bedeutet [&] bedeutet in C++
- 11. Was bedeutet die Tilde (~) in diesem Scala-Beispiel?
- 12. Was bedeutet ~> (Tilde größer als) in diesem Swift-Code?
- 13. Unterschied zwischen "+" und "-" vor dem Funktionsnamen in Objective-C
- 14. Was bedeutet $ c in einem Windows-Verzeichnis?
- 15. Was bedeutet^nach einem Typ in C++?
- 16. Was bedeutet #x in einem C-Makro?
- 17. Was bedeutet | Operator bedeutet in einem Funktionsaufruf? [C++]
- 18. Was bedeutet @ vor einer Variablen?
- 19. Was bedeutet ein "&" vor einem Pseudoelement in CSS?
- 20. Was bedeutet ".. ::." in C#?
- 21. Was bedeutet :: * in C++?
- 22. Was bedeutet/*! */In C#?
- 23. Was bedeutet/** in C++
- 24. Was bedeutet "==" in C?
- 25. Was bedeutet "&" vor Klassen in PHP?
- 26. Funktionsnamen Konflikt in C++
- 27. Was bedeutet "[das]" in C++ bedeutet
- 28. Was bedeutet ?? Operator bedeutet in C#?
- 29. Was bedeutet "[*]" (Sternmodifikator) in C?
- 30. Was bedeutet ein Semikolon vor einer Funktion?
~ ist der bitweise Negationsoperator. Wenn man sie auf eine Funktionsdefinition anwendet, bedeutet dies, dass die Funktion das * entgegengesetzte * von dem ausführt, was sie sagt - also zum Beispiel wird "~ push()' den Stapel wirklich platzen lassen und '~ writeSeriousComment()' wird tatsächlich solche Kommentare produzieren. –
Zum Wohle der Art von Person, die die meisten der C++ Fragen auf dieser Seite zu schreiben scheint, versuchen Sie nicht j_random_hacker Kommentar zu lesen. – Alan
zum Vorteil von Menschen, die einen Sinn für Humor (und einige grundlegende Programmierkenntnisse) haben DO versuchen, j_random_hacker Kommentar zu lesen. –