0
点赞
收藏
分享

微信扫一扫

Effective C++读书笔记(条款07:为多态基类声明virtual析构函数)

捌柒陆壹 2022-02-27 阅读 48

实际执行时,通常发生的是派生对象成分没被销毁。基类通常会被销毁,造成一个“局部销毁”对象。解决方法很简单,给基类一个虚析构函数,此后删除的派生类对象就会如你想要的那般。

当对象调用某一个虚函数,实际被调用的取决于vptr所指的那个vtbl——编译器在其中寻找适当的函数指针。

class A{
public:
    virtual ~A()=0;         //声明纯虚函数
}

 但必须为这个纯虚函数提供一份定义:

A::~A(){}    //纯虚函数的定义

编译器会在A的派生类的析构函数中创建一个对~A的调用动作,所以你必须为这个函数提供一份定义。

“给基类一个虚析构函数”,这个规则只适用于带多态性质的基类身上。这个基类的设计目的是为了用来“通过基类接口处理派生类对象”。并非所有的 基类设计都是为了多态用途,例如标准string和STL容器。

请记住:

举报

相关推荐

0 条评论