我发现规则(章节 N3797 :: 12.8 / 11 [class.copy]
)
默认情况下声明的复制/移动构造函数是其类的内联公共成员。如果类X有以下情况,则默认情况下类X的复制/移动构造函数被定义为删除(8.4.3):
[...]
—直接或虚基类或非静态数据成员是具有已删除或从默认构造函数无法访问的析构函数类型的情况,或
[...]
但是我根本没有理解在虚拟或直接基类中出现的已删除析构函数的含义。请考虑以下简单示例:
struct A
{
~A() = delete;
A(){ }
};
struct B : A
{
B(){ }; //error: use of deleted function 'A::~A()'
};
B b;
int main() { }
对我来说这非常不清楚。我明确定义了0参数构造函数,但它没有使用基类析构函数。但编译器认为是这样的。即使我们明确定义B
的析构函数,它也不起作用:
struct A
{
~A() = delete;
A(){ }
};
struct B : A
{
B(){ };
~B(){ };
};
//B b;
int main() {
}
你能澄清那件事吗?