[英]Should a class with an un-overridden pure virtual destructor be initializable?
普遍的看法是,如果您可以通过使用纯虚拟析构函数来使类抽象化。
引用赫伯·萨特 :
所有基类都应具有虚拟析构函数(有关原因,请参阅您最喜欢的C ++书)。 如果该类应该是抽象的(您想防止实例化),但是它没有碰巧具有任何其他纯虚函数,那么一种使析构函数成为纯虚函数的通用技术是:
#include <iostream>
struct base {
virtual ~base() = 0;
};
base::~base() { std::cout << "base destructor\n"; }
struct derived : base { };
int main() {
derived d;
}
我不知道在C ++ 11中有什么变化吗?
derived
类具有一个隐式定义的(由编译器提供)虚拟析构函数,该虚构析构函数不是纯虚拟的,它会覆盖基本析构函数。 因此, derived
的不是抽象类。 可以实例化。
这与C ++ 11无关。 自C ++ 98以来就是这样。 使基类析构函数纯为虚拟是一种使它成为抽象类的方法。 派生类中由编译器提供的析构函数将是非纯虚拟的,它将自动“抵消”那些类中的抽象性(假设没有其他纯虚拟方法从基类继承)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.