我已经看到here和here的一个很好的经验法则是对每个要用作基类的类使用虚拟析构函数。我有一个纯抽象基类(仅包含纯虚函数,没有数据成员;打算用作接口)。
class A {
public:
virtual void foo() = 0;
};
是否可以为此类添加虚拟析构函数而无需创建实现文件(该类在多个.cpp文件中包含的头文件中定义),仅用于空的析构函数,同时还避免产生clang和g ++警告,例如-虚幻的vtables?我不能将空的定义放在带有纯抽象类的头文件中,因为我将获得析构函数的多个定义。
答案 0 :(得分:2)
鉴于此,clang会针对以下内容生成警告:
class A {
public:
virtual ~A() {}
virtual void foo() = 0;
};
使用= default
不会触发它。
class A {
public:
virtual ~A() = default;
virtual void foo() = 0;
};
即使两者都有效。