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

C++のプライベートデストラクタ


ここでは、デストラクタがC++でプライベートである場合にどうなるかを確認します。アイデアを得るためにいくつかのサンプルコードを見てみましょう。

このコードにはプライベートデストラクタがありますが、オブジェクトが作成されていないため、エラーは生成されません。

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class(){
         //private destructor
      }
};
int main() {
}


このプログラムでは、1つのオブジェクトを作成しようとしているため、コンパイルエラーが発生しますが、コンパイラはデストラクタにアクセスできないことを認識できます。したがって、タスクの完了後に破棄することはできません。

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class() {
         //private destructor
      }
};
int main() {
   my_class obj;
}

出力

[Error] 'my_class::~my_class()' is private

ここで、そのクラスに対して1つのポインターを作成しても、実際のオブジェクトは作成されないため、エラーは生成されません。

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class() {
         //private destructor
      }
};
int main() {
   my_class *obj;
}


new演算子を使用して1つのオブジェクトを作成した場合も、エラーは発生しません。コンパイラは、これがメモリからオブジェクトを削除するプログラマーの責任であると考えています。

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class() {
         //private destructor
      }
};
int main() {
   my_class *obj = new my_class;
}

出力

 

ここで、オブジェクトを削除するためにdeleteステートメントを追加すると、プライベートデストラクタに対してエラーが生成されます。

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class() {
         //private destructor
      }
};
int main() {
   my_class *obj = new my_class;
   delete obj;
}

出力

[Error] 'my_class::~my_class()' is private

  1. C++でのカプセル化

    カプセル化は、データと、データを操作するメソッドを1つのコンポーネントにまとめ、外部からの干渉から保護します。本質的に、カプセル化には、データとデータを使用する関数をバンドルすることが含まれます。データのカプセル化は、データの非表示という非常に重要な概念につながります。 C ++でのカプセル化は、ユーザー定義のデータ型であるクラスを使用して実装されます。これらのクラスには、データ型と、一緒にバインドされたメソッドが含まれています。 クラスを使用したC++でのカプセル化を表すプログラムは次のとおりです。 例 #include <iostream> using namespace

  2. C++の識別子

    C ++識別子は、変数、関数、クラス、モジュール、またはその他のユーザー定義アイテムを識別するために使用される名前です。識別子は、文字AからZまたはaからzまたはアンダースコア(_)で始まり、その後に0個以上の文字、アンダースコア、および数字(0から9)が続きます。 C ++では、識別子内に@、$、%などの句読文字を使用できません。 C ++は、大文字と小文字を区別するプログラミング言語です。したがって、Manpowerとmanpowerは、C++では2つの異なる識別子です。 受け入れ可能な識別子の例を次に示します- mohd Piyush abc move_na