如果它们不包含静态数据,我是否需要为派生类实现自己的析构函数?

n0p*_*0pe 0 c++ polymorphism destructor virtual-destructor

比方说我有:

class Base {
public:
    virtual ~Base() = 0;
}

class Derived: public Base {
public:
    ~Derived();
}
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我需要Derived通过Base指针删除类,如下所示:

delete[] pt_base;
Run Code Online (Sandbox Code Playgroud)

但是,在实现的析构函数中,我实际上没有任何东西可以破坏.但我仍然需要它们通过基类删除?

如果没有大量浪费的代码和空的析构函数,实现我想要的最佳方法是什么?

πάν*_*ῥεῖ 5

不,虚拟析构函数声明/ Base类的定义就足够了,尽管将其抽象化需要在Derived类中提供这个析构函数.

如果你只是申报

class Base {
public:
    virtual ~Base() {} // <<< Have a definition
};
Run Code Online (Sandbox Code Playgroud)

您不需要在继承的类中指定任何析构函数.