본문 바로가기

컴퓨터 과학 & 영상처리 관련/C / C++

소멸자를 가상 함수로(상속할 가능성이 있는 클래스의 소멸자를)

상속할 가능성이 있는 클래스의 소멸자는 가상 함수로 만들어 주세요. 에를 들어 기본 클래스의 포인터가 그 기본 클래스에서 파생된 클래스의 오브젝트를 가리키고 있는 경우를 생각해 보겠습니다. 기본 클래스의 소멸자가 가상 함수가 아닐 경우, 기본 클래스의 포인터에 대해 delete를 실행하면, 파생 클래스의 소멸자가 호출되지 않습니다. 또한 파생 클래스의 소멸자 안에서 메모리를 해제하는 경우, 기본 클래스의 포인터로부터 delete를 실행해도 메모리 때문에 곤란합니다. 


다음과 같이 기본 클래스의 소멸자를 가상 함수로 해두면, 자식 클래스의 소멸자가 호출 됩니다


class Food{

public:

   Food();

   virtual ~Food();

}