【发布时间】:2016-10-13 03:43:18
【问题描述】:
UPD。有一个标记表明它与this question 重复。但在那个问题中,OP 询问如何使用 default 来定义纯虚拟析构函数。这个问题是关于有什么区别。
在 C++ 中(如果可能,是最新标准)在定义具有空主体实现的纯虚析构函数和仅使用空主体(或默认)之间真正的区别是什么?
变体 1:
class I1 {
public:
virtual ~I1() {}
};
变体 2.1:
class I21 {
public:
virtual ~I21() = 0;
};
I21::~I21() {}
变体 2.2:
class I22 {
public:
virtual ~I22() = 0;
};
I22::~I22() = default;
更新我发现 Variant 1 和 Variants 2.1/2.2 之间至少有 1 个区别:
std::is_abstract::value 对于变体 1 是 false,对于变体 2.1 和 2.2 是 true。
可能有人能发现 2.1 和 2.2 之间的区别吗?
【问题讨论】:
-
关于虚拟继承的问题是什么?
标签: c++ language-lawyer pure-virtual virtual-destructor