繁体   English   中英

C ++抽象类应该为(虚拟)析构函数提供实现吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM