C++での3つのルール
三つのルールは、C++を使用する際の経験則です。これは、クラスで次のいずれかが必要な場合に
- コピーコンストラクター
- 代入演算子
- またはデストラクタ
明示的に定義されている場合は、3つすべてが必要になる可能性があります。
どうしてこれなの?これは、クラスが上記のいずれかを必要とする場合、動的に割り当てられたリソースを管理しており、それを正常に達成するには他のリソースが必要になる可能性があるためです。たとえば、代入演算子が必要な場合は、現在参照によってコピーされているオブジェクトのコピーを作成するため、リソースが割り当てられます。コピーにはコピーコンストラクタが必要であり、これらのリソースを解放するにはデストラクタが必要です。
1。コピーコンストラクタ −コンパイラが提供するコピーコンストラクタは、FooManagerのすべての属性のメンバーごとのコピーを実行します。これは、代入演算子と同じ問題を引き起こします。
2。代入演算子 −指定しない場合、コンパイラはデフォルトの代入演算子を作成します。デフォルトの代入操作はメンバー単位のコピー機能であり、ディープコピーではなくシャローコピーを実行します。これにより、メモリリーク、誤った割り当てなどの問題が発生する可能性があります。
3。デストラクタ −このマネージャーが範囲外になると、管理していたすべてのリソースを解放する必要があります。
-
C ++に関する三つのルールとは何ですか?
三つのルールは、C++を使用する際の経験則です。これは、クラスで次のいずれかが必要な場合にと言う一種の良い習慣のルールです。 コピーコンストラクター 代入演算子 またはデストラクタ 明示的に定義されている場合は、3つすべてが必要になる可能性があります。 どうしてこれなの?これは、クラスが上記のいずれかを必要とする場合、動的に割り当てられたリソースを管理しており、それを正常に達成するには他のリソースが必要になる可能性があるためです。たとえば、代入演算子が必要な場合は、現在参照によってコピーされているオブジェクトのコピーを作成するため、リソースが割り当てられます。コピーにはコピーコンストラ
-
C++の代入演算子
代入演算子は、左のオペランドで指定されたオブジェクトに値を格納します。代入演算には、第2オペランドの値を第1オペランドで指定したオブジェクトに格納する単純代入と、算術演算、シフト演算、ビット演算を行ってから代入演算の2種類があります。結果。 例 簡単な代入演算子の例- #include<iostream> using namespace std; int main() { int i; i = 10; // Simple Assignment cout << i; &