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

Mon*_*urd 127 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 ;  
 } ;
Run Code Online (Sandbox Code Playgroud)

ina*_*lus 139

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

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

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

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


dmc*_*kee 68

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

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

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

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

if (~getMask()) { ...
Run Code Online (Sandbox Code Playgroud)

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


Sam*_*son 7

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

  • ...如果其分配在堆栈上。如果在对象上分配了“删除”,则将其分配给堆。 (2认同)

Kla*_*aim 5

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

需要明确的是,您必须像构造函数一样使用 ~NameOfTheClass,其他名称无效。