class test
{
public:
int data;
test(int var = 0):data(var){cout<<"constructor"<<endl;}
~test(){ cout<<"destructor"<<endl; }
test(const test& var)
{
cout<<"copy constructor"<<endl;
this->data = var.data;
}
test& operator=( const test& var)
{
cout<<"assignment op"<<endl;
this->data = var.data;
return *this;
}
};
test passByref_returnByVal(test& obj)
{
return obj;
}
int main()
{
test o1(5);
test o2 = passByref_returnByVal(o1);
cout<<"=========================="<<endl;
test o3;
o3 = passByref_returnByVal(o1);
}
出力:
constructor
copy constructor
constructor
copy constructor
assignment op
destructor
与えられた例では、オブジェクトo2
は一時オブジェクトを使用せずに直接コピー構築されます。
しかしo3
、関数の戻り値を割り当てたい2番目のケースでは、最初にコピーコンストラクターを使用して一時が作成され、次に値の割り当てのために代入演算子が呼び出されます。
私の質問は、代入演算子が参照を取得するときに、この一時的な必要性が何であったかです。関連する質問を見つけましたが、回答がありませんでした。