2012-01-06 17 views
2

可能性の重複:
Why should the copy constructor accept its parameter by reference in C++?
Why is copy constructor not allowed pass by value?コピーコンストラクタ

私はC++での私のクラスのための講義ノートを読んでいます。ノートでは、彼らはクラスのコピーコンストラクタのシグネチャは(MyClassの&その他)

MyClassの(MyClassの他)

MyClassの

ウォンであると言います仕事はありません。何故ですか?

ありがとうございました!

+1

コピーコンストラクタとはまったく何ですか? 'MyClass(MyClass other)'の呼び出しで何が起こるのでしょうか? –

+0

'const'を忘れないでください。コピーコンストラクタのより良い署名は 'MyClass(const MyClass&other)'です。 –

+0

実際には、コピーコンストラクタは 'MyClass(const MyClass&other)'でなければなりません。 –

答えて

15

MyClass(MyClass other)は値でパラメータを渡しているため、コピーを作成する必要があります。これは、無限ループにつながります(スタックがオーバーフローした場合にのみ終了します)。

+0

ありがとうございました! –

3

MyClass otherのインスタンスを2番目のシグネチャを持つコンストラクタに渡すには、コンストラクタが自身を呼び出す必要があり、その結果、無限の再循環がスタックオーバーフローにつながるからです。

試してみてください。これは非常に参考になる練習です!

+0

ありがとう......... :) –

2

MyClass(MyClass other)は、あなたが定義しているコピーコンストラクタを呼び出すコピーによってotherを渡すので、無限再帰で終了します。あなたは変数ないとして参照としてパラメータotherを渡しているので、

1

MyClass(MyClass other)はすでにotherのコピーを作成しているので、この場合は、コピーコンストラクタは

1

有効なコピーコンストラクタのシグネチャは

をしている意味がありません

MyClass(MyClass &other) MyClass(const MyClass &other) MyClass(MyClass const &other)

C++では、すべての関数パラメータが値渡しされます。これは、値によってotherを渡すと、関数呼び出し演算子が終了した後に破棄されることを意味します。 さらに、コピーコンストラクタの場合、コピーコンストラクタの無限ループが実行されます。 したがって、コピーコンストラクタのパラメータは常に参照渡しになります。

+0

2番目の2つは同じです... –

+0

はい。それらはコンパイラのPOVと同じですが、人間のものからではありません:)したがって、それらは両方とも新規参入者の目にしてください。 – DaddyM

+0

"const"とは何ですか? –

関連する問題