티스토리 뷰


이번에는 소멸자에 Virtual을 사용해야 하는 이유에 대해서 알아보겠다.

 

다음과 같은 코드가 있을때 동적으로 자식클래스(B) 생성후, 부모클래스(A)타입으로 받은후 삭제를 한다면 어떻게 될까?

 



결과는 다음과 같이 데이터타입인 A클래스의 소멸자만 호출되었다. 


 

B클래스의 소멸자가 호출되지 않기때문에 이렇게 한다면 메모리 누수가 생기고 언젠간 프로그램이 죽어버린다; 

 

그래서 제대로된 메모리해제를 하려면 소멸자에 virtual을 사용해야 한다.





 

virtual을 사용하니 다음과 같이 의도한대로 B가 메모리 해제를 하면서 소멸자가 호출되었다. 

 

잊어버리지 말자~

 

누군가에게는 작은도움이 되었기를 바라면서 오늘의 포스팅 끝~

댓글