В С++ что означает тильда "~" перед именем функции?

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

Ответ 1

Это деструктор, он уничтожает экземпляр, освобождает память и т.д. и т.д.

Вот описание с ibm.com:

Деструкторы обычно используются для освобождения памяти и выполнения другой очистки для объекта класса и его членов класса при уничтожении объекта. Деструктор вызывается для объекта класса, когда этот объект выходит из области видимости или явно удален.

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

Ответ 2

Как отмечали другие, в том случае, когда вы спрашиваете, что это деструктор для class Stack.

Но ответ на ваш вопрос точно так, как он появляется в названии:

В С++ что означает тильда "~" перед именем функции?

есть другая ситуация. В любом контексте, кроме непосредственно перед именем класса (который является контекстом деструктора), ~ является единственным дополнением (или побитовым). Чтобы быть уверенным, что это не происходит очень часто, но вы можете представить себе такой случай, как

if (~getMask()) { ...

который выглядит похожим, но имеет совсем другое значение.

Ответ 3

Это деструктор. Функция гарантированно вызывается, когда объект выходит из области видимости.

Ответ 4

Это деструктор. Он вызвал, когда объект был уничтожен (из жизни или удален).

Чтобы быть понятным, вы должны использовать ~ NameOfTheClass как для конструктора, другие имена недопустимы.

Ответ 5

Это деструктор. Этот метод вызывается, когда уничтожается экземпляр вашего класса:

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

Ответ 6

Это будет деструктор (освобождение любой динамической памяти)