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

C++での3つのルール


三つのルールは、C++を使用する際の経験則です。これは、クラスで次のいずれかが必要な場合に

  • コピーコンストラクター
  • 代入演算子
  • またはデストラクタ

明示的に定義されている場合は、3つすべてが必要になる可能性があります。

どうしてこれなの?これは、クラスが上記のいずれかを必要とする場合、動的に割り当てられたリソースを管理しており、それを正常に達成するには他のリソースが必要になる可能性があるためです。たとえば、代入演算子が必要な場合は、現在参照によってコピーされているオブジェクトのコピーを作成するため、リソースが割り当てられます。コピーにはコピーコンストラクタが必要であり、これらのリソースを解放するにはデストラクタが必要です。

1。コピーコンストラクタ −コンパイラが提供するコピーコンストラクタは、FooManagerのすべての属性のメンバーごとのコピーを実行します。これは、代入演算子と同じ問題を引き起こします。

2。代入演算子 −指定しない場合、コンパイラはデフォルトの代入演算子を作成します。デフォルトの代入操作はメンバー単位のコピー機能であり、ディープコピーではなくシャローコピーを実行します。これにより、メモリリーク、誤った割り当てなどの問題が発生する可能性があります。

3。デストラクタ −このマネージャーが範囲外になると、管理していたすべてのリソースを解放する必要があります。


  1. C ++に関する三つのルールとは何ですか?

    三つのルールは、C++を使用する際の経験則です。これは、クラスで次のいずれかが必要な場合にと言う一種の良い習慣のルールです。 コピーコンストラクター 代入演算子 またはデストラクタ 明示的に定義されている場合は、3つすべてが必要になる可能性があります。 どうしてこれなの?これは、クラスが上記のいずれかを必要とする場合、動的に割り当てられたリソースを管理しており、それを正常に達成するには他のリソースが必要になる可能性があるためです。たとえば、代入演算子が必要な場合は、現在参照によってコピーされているオブジェクトのコピーを作成するため、リソースが割り当てられます。コピーにはコピーコンストラ

  2. C++の代入演算子

    代入演算子は、左のオペランドで指定されたオブジェクトに値を格納します。代入演算には、第2オペランドの値を第1オペランドで指定したオブジェクトに格納する単純代入と、算術演算、シフト演算、ビット演算を行ってから代入演算の2種類があります。結果。 例 簡単な代入演算子の例- #include<iostream> using namespace std; int main() {    int i;    i = 10;    // Simple Assignment    cout << i; &