카테고리 없음

[C++] 소멸자 이해하기

s뽈록이s 2013. 7. 24. 09:41

class calc { public : ~calc() { cout << "나는 소멸자 입니다." << endl; } }; void main() { calc cal; }

프로그램 실행화면


소멸자, 그다지 어감이 좋지는 않다. 나에게는 말이다. 아무튼, 소멸자는 말 그대로 소멸할 때 호출되는 함수이다. 생성자가 생성할 때 호출되는 함수인 것 처럼 말이다.


소멸자는 생성자와는 달리 매개변수를 지정할 수 없다. 반환값도 없으니 당연히 오버로딩도 되지 않는다. 하나만이 존재한다. 어찌보면 당연한게 소멸할 때 무슨 인자를 넘기겠나?


생성자에서나 맴버함수에서 동적할당을 했다면 소멸자에서 해제하는 것이 일반적인 상황이다. 사실 동적할당을 하지 않으면 크게 사용할 일이 없는 녀석이기도 하다.


위 프로그램에서는 마치 생성자와 소멸자가 언제 호출되는지 혼동이 올 수 있는데 분명 main()함수의 프로그램을 전부 실행하고 나갈 때 즉 프로그램이 종료될 때 소멸자가 호출된다.


변수의 범위(scope)를 생각한다면 쉽게 이해될 것이다. 눈에 보이기 위해선 calc cal; 밑에 줄에 Sleep(1000); 이 녀석을 추가해보면 금방 알 수 있을 것이다. #include <windows.h>를 해야만 Sleep()함수를 사용할 수 있다.