如果基类的析构函数声名为纯虚函数,那么它将成为抽象类,那由它派生的派生类怎么定义为非抽象类?

解决方案 »

  1.   

    1. 可以把析构函数声明为纯虚,但还是要提供函数实现。
    2. pure virtual dtor的目的可能是为了在没有别的成员函数可以被声明为pure virtual时,使基类成为抽象类。
    3. 派生类的dtor会override基类的dtor,尽管名字不一样,所以可以派生出非抽象类
      

  2.   

    把function定义为pure virtual,也就是通知compiler,这个function不需要implementation.
    该function在vtbl中所对应的slot将为null或者一个特殊的C Runtime function.
    这就意味着,在derived class中必须用有意义的代码去override每一个pure virtual function,使vtbl中的slot具有有意义的地址。
    任何时候当类中含有其他virtual function的时候,dtor都应该定义为virtual类型。这样可以保证与其他virtual function相对应的适当层次上的dtor被调用。