C ++에서 함수 이름 앞에 물결표 "~"는 무엇을 의미합니까?


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

답변:


151

소멸자이며 인스턴스를 파괴하고 메모리를 확보하는 등의 작업을 수행합니다.

다음은 ibm.com의 설명입니다.

소멸자는 일반적으로 메모리를 할당 해제하고 객체가 소멸 될 때 클래스 객체와 해당 클래스 멤버에 대한 다른 정리를 수행하는 데 사용됩니다. 객체가 범위를 벗어나거나 명시 적으로 삭제되면 클래스 객체에 대해 소멸자가 호출됩니다.

https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_74/rzarg/cplr380.htm을 참조 하십시오.


1
이 링크는 이제 끊어졌습니다.
zenofpython

2
@zenofpython 수정되었습니다!
inanutshellus

75

다른 사람들이 지적했듯이, 당신이 그것에 대해 묻는 것은 소멸자입니다 class Stack.

그러나 제목에 표시된대로 정확하게 질문하십시오.

C ++에서 함수 이름 앞에 물결표 "~"는 무엇을 의미합니까?

다른 상황이 있습니다. 클래스 이름 바로 앞 (소멸자 컨텍스트)을 제외한 모든 컨텍스트 ~에서 보수 연산자 (또는 비트 단위 아님)입니다. 자주 나타나지는 않지만 다음과 같은 경우를 상상할 수 있습니다.

if (~getMask()) { ...

비슷해 보이지만 의미가 매우 다릅니다.


8

소멸자입니다. 객체가 범위를 벗어나면 함수가 호출됩니다.


2
... 스택에 할당 된 경우. 오브젝트가 힙에 할당 된 경우 '삭제'가 오브젝트에서 호출 된 경우
Jherico

@Jherico : 실제로는 "delete"라는 키워드가 사용될 때입니다. "new"키워드는 "operator new"를 호출 한 다음 반환 된 주소에서 생성자를 호출하므로 스택에서 메모리를 "새로"만들 수 있습니다. :) 키워드 "delete"는 소멸자를 호출 한 다음 "operator delete"를 호출합니다.
Troubadour

@Jherico 또는 네임 스페이스 범위에 있거나 정적 클래스 멤버 또는 함수 로컬 정적 변수 인 정적 저장 기간입니다. 다시 말해, 자동 저장 기능이있는 모든 Vairable은 필요할 때 자동 으로 파괴됩니다. 정적 초기화 순서를
sehe

4

이것은 소멸자입니다. 객체가 수명이 다하거나 삭제 될 때 호출됩니다.

명확하게하려면 생성자처럼 ~ NameOfTheClass를 사용해야합니다. 다른 이름은 유효하지 않습니다.


2
"다른 이름은 유효합니다"?
궤도에서 가벼움 레이스

오래된 대답 ... 나는 ~ 이후에는 클래스 이름 및 생성자 이름과 같은 이름이라면 어떤 이름이든 될 수 있다고 생각합니다.
Klaim

2

소멸자입니다. 이 메소드는 클래스의 인스턴스가 파괴 될 때 호출됩니다.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.