在C++ 11,我们能够声明析构函数是自动生成的:默认纯虚析
struct X {
virtual ~X() = default;
};
另外,我们可以声明析构函数是纯虚:
struct X {
virtual ~X() = 0;
};
我的问题是:如何声明析构函数为均为自动生成和纯虚拟?看起来像下面的语法不正确:
struct X {
virtual ~X() = 0 = default;
};
这也不是一:
struct X {
virtual ~X() = 0, default;
};
这也不之一:
struct X {
virtual ~X() = 0 default;
};
编辑: 一些澄清问题的目的。基本上我想空的类是不可实例化的基类,但派生类是可实例化的,那么类必须有一个纯虚拟析构函数。但另一方面,我不想在.cpp文件中提供定义。所以我需要一些相当于default
的机制。我想知道有没有人有解决这个问题的想法。
你能做到'虚拟〜X()= 0 {}'?现在再想想你想做什么。 – Xeo 2012-07-15 18:20:03
@Xeo:是的,你可以。但不是用那种语法;您必须提供非内联实现。任何纯虚函数都可能有一个默认实现 - 这仅仅意味着非抽象派生类*必须*实现该函数,但可能会调用父类的默认实现作为其实现的一部分。 – JohannesD 2012-07-15 18:22:10
@JohannesD:我知道,看到我对Michal的答案的评论,但是'= default'基本上是{}}课堂上的(如果你没有成员)。 – Xeo 2012-07-15 18:23:09