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 Bか? class B割り当てられたリソースを解放するために、カスタマイズされたデストラクタを実装する必要はありません。

ありがとうございました

4

2 に答える 2

2

いいえ。1つのベースデストラクタが仮想になると、派生したすべてのデストラクタは自動的に仮想になります。デフォルトの実装で十分な場合は、ユーザー定義のデストラクタを提供する必要はありません。

(実際、ベースでもデフォルトの実装で十分な場合は、virtual ~A() = default;本文を空にするのではなく、として宣言して定義する必要があります。)

于 2012-07-27T14:43:44.567 に答える
1

いいえ、リリースするリソースがない場合に備えて、その必要はありません。

virtual同じことが、およびを含む他のすべての方法に適用されます。pure virtual

于 2012-07-27T14:42:04.193 に答える