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
Это будет деструктор (освобождение любой динамической памяти)