* public virtual dtor
– 상속받을 수 있도록.
– 어떤 클래스도 상속받지 않을 것이라는 확신이 있지 않는 한 상속 가능성을 열어 두기 위해.
* protected non virtual dtor
– 상속받을 수 있도록.
– polymorphic destruction을 방지.
* private dtor
– 멤버 함수(delete this) 또는 friend인 함수에 의해서만 삭제가능하도록 통제
e.g.) scoped_ptr과 같은 경우 scoped_ptr자체를 외부에서 삭제 못하도록.
* private virtual dtor
– 하나의 클래스에서만 상속받도록 통제하고자 할 때
e.g.) B만상속가능한 A만들기. B역시 상속 불가.
class A {
virtual ~A() { }
friend B;
};
class B: public A {
virtual ~B() { }
};
– pure virtual function없이 완전 추상인 클래스를 만들 때
e.g.)
class A {
virtual ~A()=0;
}
A::~A() { }
* dtor에 대한 초간단룰은 public virtual이거나 protected non-virtual로 만들라는 것.