在c ++中,函数名前面的“〜”表示什么?

时间:2009-09-08 18:23:52

标签: c++

 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 ;  
 } ;

6 个答案:

答案 0 :(得分:126)

它是析构函数,它会破坏实例,释放内存等等。

以下是来自ibm.com的描述:

析构函数通常用于在销毁对象时释放内存并对类对象及其类成员进行其他清理。当该对象超出范围或被明确删除时,将为类对象调用析构函数。

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

答案 1 :(得分:64)

正如其他人所指出的那样,在实例中你要问的是它是class Stack的析构函数。

但完全按照标题中显示的那样提出您的问题:

  

在c ++中,函数名前面的“〜”表示什么?

还有另一种情况。在任何上下文除了之前,紧跟在类的名称(这是析构函数上下文)之前,~是一个补码(或按位)运算符。为了确保它不会经常出现,但你可以设想像

这样的情况
if (~getMask()) { ...

看起来很相似,但意义却截然不同。

答案 2 :(得分:6)

这是一个析构函数。当对象超出范围时,保证可以调用该函数。

答案 3 :(得分:4)

这是一个析构函数。当对象被销毁(超出生命范围或被删除)时调用它。

要清楚,你必须使用~NameOfTheClass之类的构造函数,其他名称无效。

答案 4 :(得分:2)

这是析构函数。当类的实例被销毁时调用此方法:

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

答案 5 :(得分:1)

那将是析构函数(释放任何动态内存)