ここで理論上の疑問。本を読んで、次のステートメントが与えられたStringBad metoo = knot;
場合:
- StringBad はクラスです
- 結び目はそのクラスのオブジェクトです
著者は、コピー コンストラクターに関して次のように述べています。
実装には、このステートメントを 2 つの手順で処理するオプションがあります。コピー コンストラクターを使用して一時オブジェクトを作成し、代入を使用して値を新しいオブジェクトにコピーします。つまり、初期化では常にコピー コンストラクターが呼び出され、= 演算子を使用してフォームが作成されます。代入演算子を呼び出すこともできます。
私の実装では、これを 1 ステップで行います。
- これと同じように、コピー コンストラクターを使用して metoo オブジェクトを作成します。
StringBad metoo(knot);
他の実装では、次のような 2 つのステップでそれを実行できることがわかりました。
- 次のように、デフォルトのコンストラクターでmetoo オブジェクトを作成します。
StringBad metoo;
- オーバーロードされた割り当て演算子を使用して、ノット オブジェクトを meto オブジェクトに割り当てます。
しかし著者は、初期化は常にコピー コンストラクターを呼び出すと述べています。あれは正しいですか?もしそうなら、コンパイラーがいくつかの実装で2つのステップでそれを行うためにたどるステップは何ですか? ワンステップでテストできると言ったので、私の原因ではテストできませんでした。