상속에서 소멸자에 virtual 사용 이유
상속을 받은 클래스의 경우
생성자 호출 순서 : 부모클래스 생성자 호출 => 자식클래스 생성자 호출
소멸자 호출 순서 : 자식클래스 소멸자 호출 => 부모클래스 소멸자 호출
virtual 소멸자를 사용하지 않는다면 delete로 인스턴스를 해제할때 부모의 인스턴스만 해제가 되고, 자식 클래스의 인스턴스는 메모리에 그대로 남아 있게 된다.
하지만 부모클래스에서 가상함수 키워드 virtual 이 사용되었다는 것은 자식 클래스에서 해당 함수가 재정의될 것을 명시하고, 이는 항상 자식클래스의 해당 메소드를 실행 시킨다.
즉, 자식 클래스의 소멸자를 먼저 호출 후, 부모 클래스의 소멸자가 호출되어 모든 인스턴스를 해제할 수 있다.
생성자 호출 순서 : 부모클래스 생성자 호출 => 자식클래스 생성자 호출
소멸자 호출 순서 : 자식클래스 소멸자 호출 => 부모클래스 소멸자 호출
virtual 소멸자를 사용하지 않는다면 delete로 인스턴스를 해제할때 부모의 인스턴스만 해제가 되고, 자식 클래스의 인스턴스는 메모리에 그대로 남아 있게 된다.
하지만 부모클래스에서 가상함수 키워드 virtual 이 사용되었다는 것은 자식 클래스에서 해당 함수가 재정의될 것을 명시하고, 이는 항상 자식클래스의 해당 메소드를 실행 시킨다.
즉, 자식 클래스의 소멸자를 먼저 호출 후, 부모 클래스의 소멸자가 호출되어 모든 인스턴스를 해제할 수 있다.
댓글
댓글 쓰기