纯抽象基的虚拟析构函数 类
Virtual destructor for pure abstract base classes
我已经看到 here and here 一个好的经验法则是为每个 class 用作基础 class 使用虚拟析构函数。我有一个纯抽象基础class(只包含纯虚函数,没有数据成员;打算用作接口)。
class A {
public:
virtual void foo() = 0;
};
是否可以在不创建实现文件的情况下向此 class 添加虚拟析构函数(此 class 在几个 .cpp 文件中包含的头文件中定义)仅用于空析构函数同时还要避免 clang 和 g++ 警告,例如 -Wweak-vtables?我不能将空定义放在带有纯抽象的头文件中 class 因为我会得到析构函数的多个定义。
然而,clang 生成警告:
class A {
public:
virtual ~A() {}
virtual void foo() = 0;
};
使用 = default
不会触发它。
class A {
public:
virtual ~A() = default;
virtual void foo() = 0;
};
即使两者都有效。
我已经看到 here and here 一个好的经验法则是为每个 class 用作基础 class 使用虚拟析构函数。我有一个纯抽象基础class(只包含纯虚函数,没有数据成员;打算用作接口)。
class A {
public:
virtual void foo() = 0;
};
是否可以在不创建实现文件的情况下向此 class 添加虚拟析构函数(此 class 在几个 .cpp 文件中包含的头文件中定义)仅用于空析构函数同时还要避免 clang 和 g++ 警告,例如 -Wweak-vtables?我不能将空定义放在带有纯抽象的头文件中 class 因为我会得到析构函数的多个定义。
然而,clang 生成警告:
class A {
public:
virtual ~A() {}
virtual void foo() = 0;
};
使用 = default
不会触发它。
class A {
public:
virtual ~A() = default;
virtual void foo() = 0;
};
即使两者都有效。