소멸자
클래스의 객체가 소멸될 때 자동으로 호출되는 함수입니다. 따라서, 객체가 소멸 시 실행되야 할 코드를 작성합니다.
소멸자는 인수와 리턴값이 없기 때문에, 오버로드를 할 수 없습니다.
클래스를 동적으로 메모리 확보를 하면 객체가 사라질 때 메모리를 해제해 줘야 합니다. 이때, 소멸자를 사용해서 객체의 소멸과 동시에 확보했던 메모리를 해제합니다.
소멸자 사용 방법
위와 같이 소멸자를 사용하면 객체가 소멸되는 순간에 소멸자가 호출되어 내용이 실행됩니다.
동적 메모리 확보 및 소멸자를 이용한 해제
이렇게 하면, 객체가 생성되면서 메모리를 동적으로 확보하고, 객체가 소멸하면서 메모리를 해제합니다.
객체가 소멸하는 시점은 언제일까?
소멸자는 객체가 소멸되면 호출되는 함수라고 했습니다. 그러면, 객체가 소멸하는 시점은 언제일까요?
일단, 객체라는 것은 클래스 "변수"입니다. 따라서 어느 위치에 선언되었냐에 따라서 소멸시기가 결정됩니다. 함수 바깥에 선언이 되었다면 전역변수로 프로그램이 끝날 때 객체가 소멸할 것이고, 함수안에 선언되었다면 함수가 종료되는 시점에 객체는 소멸됩니다. 만약 main( )함수에서 객체가 생성되었다면, main함수가 끝나는 시점. 즉, 프로그램이 끝나는 시점에 객체가 소멸할 것입니다.
소멸자 호출 순서
파생 클래스가 소멸되면, 생성자와는 반대 순서로 파생 클래스의 소멸자가 먼저 호출되고, 그 다음 기본 클래스의 소멸자가 호출됩니다.
기본 클래스의 포인터를 다루는 경우의 소멸자
기본 클래스의 포인터로 파생 클래스의 객체를 다루면 기본 클래스의 소멸자만 호출되는 상황이 발생합니다.
따라서, 기본 클래스의 소멸자를 virtual을 붙여서 가상 함수로 만들어 사용해야 합니다.
C++ 가상 함수 (virtual) - 가상 소멸자
가상 소멸자 클래스에 가상 함수를 정의할 때 주의할 점은 소멸자도 가상함수로 만들어야 한다는 점입니다. 동적으로 생성한 파생 클래스 객체를 기본 클래스 포인터로 가리키고 있을 때 동적
wonjayk.tistory.com
'C++' 카테고리의 다른 글
[27] C++을 마치며... (0) | 2021.05.10 |
---|---|
[26] 클래스 템플릿 (0) | 2021.05.10 |
[24] 예외 처리 (0) | 2021.05.09 |
[23] 클래스 계층 (0) | 2021.05.07 |
[22] 추상 클래스 (0) | 2021.05.07 |