美文网首页
条款07:为多态基类声明 virtual 析构函数

条款07:为多态基类声明 virtual 析构函数

作者: robotai | 来源:发表于2020-09-29 00:01 被阅读0次

    总结:

    1、带多态性质的base classes 应该声明一个virtual 析构函数。如果class 带有任何 virtual 函数,就应该拥有一个 virtual 析构函数。

    2、class 设计的目的不是为了作为基类使用,或是不是为了具备多态性,就不该声明 virtual 析构函数。

    知识细节记录:

    1、理解 factory 函数:返回一个 base class 指针,指向生成的派生类对象。

    2、当派生类对象 经由一个 base class 指针被删除,如果 base class 是 non virtual 析构函数,派生类对象的派生类部分不会被删除干净,会造成局部销毁,资源泄露的问题。

    3、当一个类 不是基类时,定义了 virtual 析构函数,会导致类对象占用更多的内存。

    4、必须与虚函数指针 vptr 指出运行期间会被调用的具体的虚函数。需要查询虚函数表 vtbl.

    5、如果一个 类不带虚析构函数,就不要去继承,这种类包括STL容器,如 vector list set 等。

    6、析构函数工作原理:最深的派生类的析构函数最先被调用,然后是其每一个base class 的析构函数被调用。

    7、定义一个抽象类,用于继承 virtual 析构函数。

    class A {

    ..

    public:

    virtual ~A() = 0;  // pure virtual 析构函数

     };

    A::~A() {}   //pure virtual 析构定义

    相关文章

      网友评论

          本文标题:条款07:为多态基类声明 virtual 析构函数

          本文链接:https://www.haomeiwen.com/subject/jfvjuktx.html