コピーコンストラクターと代入演算子を実験するためにこのコードを実行します
class AClass {
private:
int a;
public:
AClass (int a_) : a(a_) {
cout << " constructor AClass(int) " << a << endl;
}
AClass(const AClass & x) : a(x.a) {
cout << " copy constructor AClass(const AClass &) " << a << endl;
}
AClass & operator=(const AClass & x) {
a = x.a;
cout << " AClass& operator=(const AClass &) " << a - endl;
return *this;
}
};
AClass g () {
AClass x(8);
return x;
}
int main () {
cout << " before AClass b = g() " << endl;
AClass b = g();
cout << " after" << endl;
cout << " before AClass c(g()) " << endl;
AClass c (g());
cout << " after" << endl;
}
なぜメッセージが表示されないことがわかりましたreturn x;
か?
コピーコンストラクタまたはoperator=を呼び出すべきではありませんか?
これは出力です:
AClassの前b=g() コンストラクターAClass(int)8 後 AClassの前c(g()) コンストラクターAClass(int)8 後