【发布时间】:2019-04-20 03:09:12
【问题描述】:
我看到here 和here 认为,一个好的经验法则是对每个打算作为基类的类使用虚拟析构函数。我有一个纯抽象基类(只包含纯虚函数,没有数据成员;打算用作接口)。
class A {
public:
virtual void foo() = 0;
};
是否可以在不为空析构函数创建实现文件的情况下向该类添加虚拟析构函数(该类在多个 .cpp 文件中包含的头文件中定义),同时还避免了 clang 和 g++ 警告,例如 - Wweak-vtables?我不能将空定义放在带有纯抽象类的头文件中,因为我会得到多个析构函数的定义。
【问题讨论】:
-
" 将获得析构函数的多个定义。" - 不,你不会,如果它在课堂上是内联的 - 你试过了吗?
-
virtual ~A() = default; -
或
virtual ~A() {} -
@Neil Butterworth 这会触发来自 clang 的 -Wweak-vtables
-
嗯,我认为重复是一个不同的问题。
标签: c++ g++ abstract-class clang++ virtual-destructor