C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++で仮想デストラクタを使用するのはいつですか?


効果的なC++のScottMeyersによると-

クラスに仮想関数がある場合は、仮想デストラクタが必要です。基本クラスとして設計されていないクラス、または多態的に使用されるように設計されていないクラスは、仮想デストラクタを宣言しないでください。

したがって、ポリモーフィック基本クラスで仮想デストラクタを宣言する必要があります。これは、派生コンストラクターを使用して基本クラスのオブジェクトを作成する場合-

Base *b = new Derived();
// use b
delete b;

Baseのデストラクタが仮想でない場合、この場合、deletebの動作は未定義です。デストラクタへの呼び出しは、他の非仮想コードと同様に解決されます。したがって、基本クラスのデストラクタが呼び出されますが、派生クラスのデストラクタは呼び出されません。これにより、リソースリークが発生します。



  1. 前方宣言C/C ++はいつ使用できますか?

    前方宣言により、宣言に続くコードは、Personという名前のクラスがあることを認識できます。これは、これらの名前が使用されていることを確認すると、コンパイラーを満足させます。後でリンカはクラスの定義を見つけます。 例 Class Person; void myFunc(Person p1) {    // ... } Class Person {    // Class definition here }; したがって、この場合、コンパイラがmyFuncに遭遇すると、コードのどこかでこのクラスに遭遇することがわかります。これは、クラスを使用するコ

  2. C ++で「友達」を使用する必要があるのはいつですか?

    クラスのフレンド関数はそのクラスのスコープ外で定義されていますが、クラスのすべてのプライベートメンバーと保護されたメンバーにアクセスする権利があります。フレンド関数のプロトタイプはクラス定義に表示されますが、フレンドはメンバー関数ではありません。 フレンドは、関数、関数テンプレート、メンバー関数、またはクラスまたはクラステンプレートにすることができます。この場合、クラス全体とそのすべてのメンバーがフレンドになります。 関数をクラスのフレンドとして宣言するには、次のように、クラス定義の関数プロトタイプの前にキーワードfriendを付けます- class Box {    d