VisualStudio/C++

[C++] 타입변환에서 소멸자 Virtual 사용

usingsystem 2023. 7. 24. 16:59
728x90

상속을 받는 클래스가 있다고 가정하자.

c++에서는 생성자는 부모클래스 생성자에서 자식클래스의 생성자 순으로 호출된다.

소멸자에서 만약 부모 클래스의 소멸자에 Virtual을 정의했다면 제거할 때 자식클래스의 소멸자가 호출된 후 부모 클래스의 소멸자가 호출된다. Virtual 클래스로 소멸자를 정의하지 않은 상태에서 자식클래스를 부모클래스 포인터를 사용하여 제거를 한다면 부모클래스의 소멸자만 호출되며 자식의 소멸자는 호출되지 않는 다 즉 완벽하게 제거가 이루어졌다고 볼 수 없다.

virtual로 정의한 부모클래스에서 부모포인터로 삭제 할 때 자식의 소멸자가 호출되는 이유는 virtual로 정의된 클래스가 있다면 가상함수테이블이 만들어져 바이너리 영역에 기록되며 해당 클래스로 만들어진 객체에서 함수를 호출할 때 호출 클래스의 가상함수 테이블을 참조해서 함수를 호출하기 때문이다. 

728x90