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



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

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

是否可以在不为空析构函数创建实现文件(该类在几个.cpp文件中包含的头文件中定义(的情况下向该类添加虚拟析构函数,同时避免clang和g++警告,如-Wweak vtables?我不能将空定义与纯抽象类一起放在头文件中,因为我将获得析构函数的多个定义。

然而,clang为生成警告

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

使用= default不会触发它。

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

即使两者都有效。

演示

最新更新