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

C++のデストラクタ


C ++のデストラクタは、オブジェクトを削除するクラスのメンバー関数です。これらは、関数が終了したとき、プログラムが終了したとき、変数の削除が呼び出されたときなど、クラスオブジェクトがスコープ外になったときに呼び出されます。

デストラクタは、引数を取らず、何も返さないため、通常のメンバー関数とは異なります。また、デストラクタの名前はクラスと同じで、名前の前にチルダ(〜)が付いています。

C++でデストラクタをデモンストレーションするプログラムは次のとおりです。

#include<iostream>
using namespace std;
class Demo {
   private:
   int num1, num2;
   public:
   Demo(int n1, int n2) {
      cout<<"Inside Constructor"<<endl;
      num1 = n1;
      num2 = n2;
   }
   void display() {
      cout<<"num1 = "<< num1 <<endl;
      cout<<"num2 = "<< num2 <<endl;
   }
   ~Demo() {
      cout<<"Inside Destructor";
   }
};
int main() {
   Demo obj1(10, 20);
   obj1.display();
   return 0;
}

出力

Inside Constructor
num1 = 10
num2 = 20
Inside Destructor

上記のプログラムでは、クラスDemoには、num1とnum2をn1とn2によって提供される値で初期化するパラメーター化されたコンストラクターが含まれています。また、num1とnum2の値を出力する関数display()も含まれています。デモには、クラスオブジェクトのスコープが終了したときに呼び出されるデストラクタもあります。このためのコードスニペットは次のとおりです。

class Demo {
   private:
   int num1, num2;
   public:
   Demo(int n1, int n2) {
      cout<<"Inside Constructor"<<endl;
      num1 = n1;
      num2 = n2;
   }
   void display() {
      cout<<"num1 = "<< num1 <<endl;
      cout<<"num2 = "<< num2 <<endl;
   }
   ~Demo() {
      cout<<"Inside Destructor";
   }
};

関数main()には、クラスタイプDemoのオブジェクトのオブジェクト定義が含まれています。次に、関数display()が呼び出されます。これを以下に示します。

Demo obj1(10, 20);
obj1.display();

  1. C++のコンストラクタ

    コンストラクターは、クラスの新しいオブジェクトが作成されたときに実行されるクラスの関数です。コンストラクターはクラスと同じ名前であり、戻り型はなく、voidでさえありません。これらは主に、クラスの変数の初期値を提供するのに役立ちます。 コンストラクターの2つの主なタイプは、デフォルトのコンストラクターとパラメーター化されたコンストラクターです。これらの詳細は次のとおりです。 デフォルトコンストラクタ デフォルトのコンストラクターはパラメーターを取りません。デフォルトのコンストラクターがプログラマーによって明示的に提供されていない場合、コンパイラーは暗黙のデフォルトのコンストラクターを提供し

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

    効果的なC++のScottMeyersによると- クラスに仮想関数がある場合は、仮想デストラクタが必要です。基本クラスとして設計されていないクラス、または多態的に使用されるように設計されていないクラスは、仮想デストラクタを宣言しないでください。 したがって、ポリモーフィック基本クラスで仮想デストラクタを宣言する必要があります。これは、派生コンストラクターを使用して基本クラスのオブジェクトを作成する場合- Base *b = new Derived(); // use b delete b; Baseのデストラクタが仮想でない場合、この場合、deletebの動作は未定義です。デストラクタへ