2009-09-08 61 views
97
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 ; 
} ; 
+115

〜是按位否定運算符。當應用於函數定義時,它意味着該函數將執行與它所要做的相反的操作,例如'〜push()'會真正彈出堆棧,而'〜writeSeriousComment()'實際上會產生這樣的評論。 – 2009-09-08 18:50:29

+29

對於那些似乎在本網站發佈大部分C++問題的人,不要試圖閱讀j_random_hacker的評論。 – Alan 2009-09-08 19:17:09

+34

爲有幽默感(以及一些基本編程知識)的人帶來好處請務必閱讀j_random_hacker的評論。 – 2009-09-09 02:14:13

回答

3

這是一個析構函數。它在對象被銷燬時被調用(超出生命範圍或被刪除)。

需要明確的是,你必須使用〜NameOfTheClass像構造,其他名稱是無效的。

+2

「其他名稱有效」? – 2011-06-25 17:54:39

+0

舊的答案...我想我的意思是,它可以是任何名稱,只要它與類名和構造函數名相同即可。 – Klaim 2011-06-26 10:07:18

5

這是一個析構函數。當對象超出範圍時,保證函數被調用。

+1

...如果它分配在堆棧上。當在對象上調用'delete'時,如果它被分配到堆上。 – Jherico 2009-09-08 19:00:34

+0

@Jherico:實際上是使用關鍵字「delete」的時候。請記住,關鍵字「new」調用「operator new」,然後在返回的地址上調用構造函數,因此完全可以在棧上「新建」內存。 :)關鍵字「delete」調用析構函數,然後調用「operator delete」。 – Troubadour 2009-09-08 20:53:13

+0

@Jherico或居於命名空間範圍或是一個靜態類成員或函數本地靜態變量:靜態存儲持續時間。換句話說:所有具有自動存儲的可變數據將在適當時自動被破壞。當心[靜態初始化命令Fiasco](http://stackoverflow.com/a/1005709/85371) – sehe 2012-10-15 07:01:18

1

這將是析構函數(釋放任何動態內存)

2

這是析構函數。當你的類的實例銷燬這種方法被稱爲:

Stack<int> *stack= new Stack<int>; 
//do something 
delete stack; //<- destructor is called here; 
+1

有一個*缺少。 – Klaim 2009-09-08 18:38:37

+0

hops ..謝謝:-) – Pierre 2009-09-08 20:35:27

52

正如其他人指出,在實例你問它是class Stack析構函數。

但是考慮你的問題正是因爲它出現在標題:

在C++中什麼對波浪線「〜」功能名錶示過嗎?

還有另一種情況。在任何情況下除了之前一類的名稱(這是析構函數上下文),~是一個補(或不按位)運算符。爲了確保它不上來,很多時候,但你能想象像

if (~getMask()) { ... 

看起來相似,但有一個非常不同的意義的情況下。

相關問題