C++「クラス名オブジェクト1=オブジェクト2;」「クラス名オブジェクト1(オブジェクト2);」の構造方法は一致している
4154 ワード
コードを参照:
は単一ステップ追跡で観察したところ,1と2の構造方法は同じであり,いずれも複製構造関数を呼び出すことであることが分かった.しかし③コンストラクション関数が呼び出され、レプリケーションコンストラクション関数は呼び出されなかった.
これにより、既存のオブジェクトを用いて新しいオブジェクトを初期化すると、コンパイラはレプリケーション構造関数を呼び出すと結論することができる.ただし、割り当てられたオブジェクトがすでに存在する場合、この既存のオブジェクトに別の既存のオブジェクトを割り当てると、コンストラクション関数は呼び出されません.
#include<iostream>
using namespace std;
class TV{
public:
TV(int s=41): size(s){}
TV(const TV &r): size(r.size){ cout<<1;}
~TV(){}
private:
int size;
};
TV fun(TV &u){
TV t=u; //①
TV t(u); //②
TV t; t=u; //③
TV t; t(u); //t(u)
return t;
}
int main(){
TV x,y;
x=fun(y);
return 0;
}
は単一ステップ追跡で観察したところ,1と2の構造方法は同じであり,いずれも複製構造関数を呼び出すことであることが分かった.しかし③コンストラクション関数が呼び出され、レプリケーションコンストラクション関数は呼び出されなかった.
これにより、既存のオブジェクトを用いて新しいオブジェクトを初期化すると、コンパイラはレプリケーション構造関数を呼び出すと結論することができる.ただし、割り当てられたオブジェクトがすでに存在する場合、この既存のオブジェクトに別の既存のオブジェクトを割り当てると、コンストラクション関数は呼び出されません.