1

コピー コンストラクター、ディープ コピー、定数参照

Q. メモリ管理に関して。

クラス A のコピー コンストラクターの形式は A(const A& a) です。パラメーターが参照によって渡されるのはなぜですか? A(A a) の形式のコンストラクタを定義できない理由を説明してください

答え。その理由は次の 3 つです。

  1. パラメータとしてオブジェクトを渡すときの定数参照はより効率的です
  2. A(A a) を const 修飾子なしで渡すと、変更されるべきではないオブジェクトが誤って変更される可能性があります
  3. ディープコピーを作成できるようにするためです

その3つの理由は正しいですか?

私にお知らせください。ありがとう、

4

1 に答える 1

3
A(A a)

a値で渡されるため、 のコピーを生成する必要があります。したがって、コピーを行うには、コピー コンストラクターを呼び出す必要があります。ただし、その場合、コピー コンストラクターが定義されていないため、 のコピーを生成できないため、a参照渡しにする必要があります。

フォーマットがあります:

 A(const A& a)

注意: 定数参照は、実際には定数への参照です。これは、 のオブジェクトを参照渡しし、 のコピーを作成するときAに変更してはならないことを意味します。aa

コピー コンストラクターが const 参照を取ることのより重要なことは、一時オブジェクトが非 const 参照にバインドできないことです。したがって、コピー コンストラクターは、一時オブジェクトのコピーを作成できるように、const オブジェクトへの参照を取得する必要があります。

于 2013-04-23T02:13:40.153 に答える