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

亚当斯佩里

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

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

是否可以在不创建实现文件的情况下向此类添加虚拟析构函数(此类定义在包含在多个 .cpp 文件中的头文件中)仅用于空析构函数,同时还避免了诸如 -Wweak-vtables 之类的 clang 和 g++ 警告? 我不能将空定义放在带有纯抽象类的头文件中,因为我会得到析构函数的多个定义。

杰洛德42

而 clang 生成警告:

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

使用= default不会触发它。

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

即使两者都有效。

演示

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章