ルールは、次のいずれかを提供する必要がある場合です。
- コピーコンストラクターまたは
- デストラクタまたは
- コピー代入演算子
その場合、おそらく 3 つすべてを提供する必要があります。このルールは3 つのルールとして知られています。
コピー コンストラクターを宣言しない方が安全ですか?
安全。
あなたの例では必要ですか?
あまり。具体的には、3 つのルールがそれを支配します。詳細については、リンクされた質問を確認してください。
デフォルトのコピー コンストラクターはどのように見えますか?
これは、デフォルトのコピーコンストラクターが何をするのかを尋ねていると思います。
これは次で回答されています:
C++03 Standard 12.8 Copying class objects:
Para 8:
クラス X の暗黙的に定義されたコピー コンストラクターは、そのサブオブジェクトのメンバーごとのコピーを実行します。コピーの順序は、ユーザー定義のコンストラクターでのベースとメンバーの初期化の順序と同じです (12.6.2 を参照)。各サブオブジェクトは、そのタイプに適した方法でコピーされます。
— サブオブジェクトがクラス型の場合、クラスのコピー コンストラクターが使用されます。
— サブオブジェクトが配列の場合、要素の型に適した方法で各要素がコピーされます。
— サブオブジェクトがスカラー型の場合、組み込み代入演算子が使用されます。
仮想基本クラス サブオブジェクトは、暗黙的に定義されたコピー コンストラクターによって 1 回だけコピーされます (12.6.2 を参照)。
コピーコンストラクターを宣言しなくても、呼び出すとデフォルトのコンストラクターが呼び出されますoperator=()
コピー コンストラクターは、クラス オブジェクトのコピーを作成する必要がある場合にのみ呼び出されます。これには、関数の受け渡し中に作成されたオブジェクトのコピーが含まれます。
コピー代入演算子はオブジェクトA
を値渡しします。この値渡しは、コピー コンストラクターを介してオブジェクトのコピーを渡すことによって実現されるため、コピー コンストラクターを呼び出します。コピーを避けるには、参照
渡しする必要があります。
A& A::operator=(const A& other)
よく読んでください:
参照渡しと値渡しの違いは何ですか?