0
class A
{
public:
    A(…) {…}
    virtual ~A() {…}
    
private:
    // may contains data
};

class B : public A
{
public:
    B(…) {…}
private:
    // contains no data
};

class C : public B
{
public:
    C(…) {…}
    ~C() {…}
private:
    // may contains data
};

如您所见,class A是基类,所以我们必须提供一个已实现的虚拟析构函数。

问题> 我们是否必须为具体提供默认析构函数class Bclass B本身不需要实现自定义析构函数来释放任何分配的资源。

谢谢

4

2 回答 2

2

不会。一旦一个基本析构函数是虚拟的,所有派生的析构函数都会自动成为虚拟的。如果默认实现就足够了,则不需要提供用户定义的析构函数。

(事实上​​,如果默认实现即使在基础中就足够了,您应该将其声明并定义为virtual ~A() = default;,而不是使用空主体。)

于 2012-07-27T14:43:44.567 回答
1

不,如果你没有资源可以释放,你不必这样做。

这同样适用于任何其他方法,包括virtualpure virtual

于 2012-07-27T14:42:04.193 回答