-1

コピー コンストラクターの呼び出しに関する 3 つのケースについて学びました。

1. 変数が同じクラスのオブジェクトから初期化されている

2. クラスの値パラメーターで関数が呼び出される

3. 関数がクラスのオブジェクトである値を返す

また、教科書では、上記の 2 つのケース (case2 と 3) について、コピー コンストラクターの呼び出しを避けるために、参照渡しを使用すると述べています。

いくつかの情報を検索しましたが、正確には理解できません。

例(私は自分のコードを作りました)

class CpClass{
    int p;

       CpClass(const CpClass &obj){
           cout<<"user-defined constructor"<<endl;
           p = obj.p; 
       }

       ~CpClass(){
       cout<<"destructor"<<endl;
       }
};

void show1(String &s)
{ cout << "show1 : " << s.p; }
void show2(String s)
{ cout << "show2 : " << s.p; }

 int main(){

 CpClass c1(10);
 CpClass c2(c1);
 show1(c2);
 show2(c2);

  };

これについていくつかの情報を見つけました。

まず、クラスオブジェクトである引数を渡すとき、引数が値ではなく参照形式の場合、関数が終了するとすぐにデストラクタを呼び出しません。メイン関数の終了時にデストラクタを呼び出します

次に、パラメーター形式が値による呼び出しか参照による呼び出しかに関係なく、引数をコピーするときにコンストラクターを呼び出します (コードでは、String &s または String s)。

私は正しいですか?

4

1 に答える 1