코드

pure virtual function call 사례

ehei 2024. 7. 29. 06:49
struct Foo
{
  virtual void Stop() = 0;
  
  virtual ~Foo() { Stop(); }
};

struct Goo : Foo
{
  virtual void Stop() override final {
  	// pure virtual function call
  }
};

 

간단한 코드로 순수 가상 함수 호출 예외(pure virtual function call)를 재현할 수 있다. 부모 클래스가 오버라이딩된 함수를 호출할 때 자식 클래스의 인스턴스가 이미 파괴된 경우가 그러하다.

 

위의 코드로 보면 Foo 클래스의 소멸자가 호출되는 시점은 이미 Goo 클래스의 인스턴스가 파괴된 이후이다. 따라서 부모 클래스의 소멸자에서 오버라이딩된 함수를 호출하는 일이 없도록 주의해야 한다.