[英]C++ Should an abstract class provide implementation for a (virtual) destructor?
我有一个抽象的类,它定义了具体类的常见行为。 因此,没有内存可以清理,因为类无法实例化。 但是,我知道你需要一个虚拟析构函数,以便在它们的静态类型是Base类时调用派生的析构函数。
这是否意味着我应该总是为抽象类声明一个虚拟析构函数,但只是将实现留空?
您必须在类层次结构中提供每个析构函数的定义,因为在派生类被销毁时,所有析构函数都会被调用,即使某些析构函数是微不足道的。
通常,您可以通过在基类中放置virtual ~Base() { }
(或其中一些异常指定的变体)来实现此目的。 但是,如果析构函数是唯一的虚拟成员函数,并且您想要使基本抽象,则可以使析构函数为纯虚拟,但您仍需要定义它:
struct Base
{
virtual ~Base() = 0;
};
Base::~Base() { }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.