纯抽象基类的虚拟析构函数

时间:2018-11-16 22:16:18

标签: c++ g++ abstract-class clang++ virtual-destructor

我已经看到herehere的一个很好的经验法则是对每个要用作基类的类使用虚拟析构函数。我有一个纯抽象基类(仅包含纯虚函数,没有数据成员;打算用作接口)。

class A {
    public:
        virtual void foo() = 0;
};

是否可以为此类添加虚拟析构函数而无需创建实现文件(该类在多个.cpp文件中包含的头文件中定义),仅用于空的析构函数,同时还避免产生clang和g ++警告,例如-虚幻的vtables?我不能将空的定义放在带有纯抽象类的头文件中,因为我将获得析构函数的多个定义。

1 个答案:

答案 0 :(得分:2)

鉴于此,clang会针对以下内容生成警告:

class A {
public:
    virtual ~A() {}
    virtual void foo() = 0;
};

使用= default不会触发它。

class A {
public:
    virtual ~A() = default;
    virtual void foo() = 0;
};

即使两者都有效。

Demo