2017-06-27 11 views
-2

は、我々は、以下の操作があるとします。代入演算子を使ってオブジェクトを返すのはどうでしょうか?

Object a = b.copy(); 

copy()は基本的にメソッドのコピーオブジェクトであり、そのコピーを返します。

Object copy() 
{ 
    Object copied_Object; 
    /..do the copy../ 
    return copied_Object; 
} 

は、最初に私はリターンが割り当てoperator =をトリガーと操作の右側のフィールドに 結果を置くだろうと思ったが、それは実際にはコピーコンストラクタがアクティブになることが判明した後、オブジェクトが関数内に作成します破壊される。これは私が知っているものです。

私の質問は、Object a = b.copy();が実行されたときに何が起こるかを段階的に説明できますか?

+5

1.オブジェクトa = b.copy();は割り当てではありません。 2.なぜ、これを返さないのですか?コピーコンストラクタは、その理由のためにその名前を持ちます。 – LogicStuff

+1

コピーエリッションも発生する可能性があります(C++では17となります)。 – Jarod42

+0

私はちょうどそれがコンパイルされたときに起こるかと尋ねているので、割り当てはトリガされません。オブジェクトa = bを書くときにトリガされないので、意味があると思います。 –

答えて

1
Object a = b.copy(); 

オブジェクトの作成/構築/初期化の指示です。割り当ては行われません。

割り当てが

object = something; 

お知らせオブジェクトの宣言がない場合、次のようになります。

今構築

Object a = b.copy(); 
、タイプ Objectのb.copy()で、これは別の Objectによって構築する能力を有すること Objectを必要とします。これはもちろんコピーコンストラクタです。コンパイラが生成された、またはデフォルトの、または明示的なコピーコンストラクタ。

文が実行されると、コピー機能は、どちらか

  1. によって、呼び出し元に作成されたcopied_Objectを実行し、転送しますコピー建設
  2. コピーの省略、コンパイラは、そのブラックマジックボックスを起動し、構築しますオブジェクトaは、インプレースです。コピー構成は必要ありません。 Jarodが暗唱した。 LogicStuffとして

、あなたは戻り値に

Object copy() 
{ 
    return *this; 
} 

このコピーbオブジェクトの内容を行うことができます示唆し、コピーコンストラクタが必要です。

私もダニエル・Hさんのコメントを盗み、

Object a = b; 

は、通常の状況下ではまったく同じ意味を運ぶだろうと結論付けます。私。少なくとも驚きの状況。

+0

ありがとう!とった! –

+0

@Raeedmndow答えがあなたを満たしている場合は、答えの横にある緑のチェックマークをチェックする必要があります。これはあなたの他の質問にも役立ちます。 –

関連する問題