본문 바로가기
언어/C++

[C++ 기본 공부정리] 14-5. OOP - 소멸자(destructor)

by 민-Zero 2020. 1. 1.

공부 내용을 정리하는 목적 이므로 참고용으로만 읽어 주시기 바랍니다.

틀린 부분에 대한 지적은 감사합니다.

객체가 생성될 때 객체의 초기화를 위해 생성자를 사용하였다. 그렇다면 객체의 사용이 끝나서 객체가 소멸될 때 반대의 역할을 수행할 멤버 함수가 필요하다. 이 역할을 수행하는 것이 소멸자(destructor)이다.

 

1. 소멸자(destructor)

생성자가 객체가 생성될때 컴파일러가 자동으로 호출하는 함수라면 소멸자는 객체가 소멸될 때 객체를 정리하기 위해 자동으로 호출되는 함수이다. 주로 동적할당을 통해 할당받은 메모리를 반환하거나 열어 놓은 파일을 닫는 등 마무리 작업이 필요한 경우 소멸자를 생성한다.

 

문법)

class 클래스명{

    ~클래스명() 

};

 

생성자 처럼 클래스명과 같은 이름을 가지며 이름 앞에 물결(tilde, ~)을 붙인다. 따로 선언하지 않으면 생성자와 마찬가지로 텅 빈 소멸자 ~클래스명() {};를 자동으로 생성해 준다. 소멸자 또한 사용이 끝난 객체의 할당 해제 등을 목적으로 하므로 반환 값이 존재하지 않는다.

 

소멸자의 특징을 정리하면

① 소멸자는 인수와 반환값이 존재하지 않는다.

② 반환값이 없을 때 사용하는 반환 타입 void를 사용하지 않는다.

③ 생성자는 오버로딩을 통해 여러 종류의 생성자를 가질 수 있지만 소멸자는 1개만 가능하다.

 

2. 소멸자 사용

소멸자는 주로 클래스에 동적할당을 통해 메모리를 할당받는 멤버 변수가 존재할 경우 할당 해제를 위해 사용한다. 소멸자를 통해 작업하지 않고 따로 코드를 작성해도 되지만 혹시 모를 메모리 누수를 막기 위해 소멸자를 이용하여 자동으로 메모리를 해제도록 한다.

각 영역별로 메모리를 할당받고 사용종료후 할당받은 메모리가 해제되는 시기를 다시 상기하면

-스택 영역 : 해당 스코프( {} ) 이 끝날 때

-힙 영역 : delete 명령을 통해 메모리 해제할 때

-데이터 영역 : 전역, 정적 변수 등 프로그램 전체에서 사용되므로 프로그램이 종료될 때

- 코드 영역 : 프로그램의 코드 자체 구성이므로 프로그램 종료될 때

따라서 heap 영역에 메모리를 할당받는 동적 할당의 경우 소멸자를 통해 메모리 할당 해제를 해주어야 한다.

댓글