このオブジェクトへの参照を返すことは、代入演算子のオーバーロードでよく使用されます。また、setter メソッドへの一連の呼び出しによってオブジェクトを初期化できるようにする名前付きパラメーター イディオムのベースとしても使用されます。Params().SetX(1).SetY(1)
各メソッドは *this への参照を返します。
しかし、への参照を返すのは正しいですか*this
。一時オブジェクトの this への参照を返すメソッドを呼び出すとどうなるでしょうか。
#include <iostream>
class Obj
{
public:
Obj(int n): member(n) {}
Obj& Me() { return *this; }
int member;
};
Obj MakeObj(int n)
{
return Obj(n);
}
int main()
{
// Are the following constructions are correct:
std::cout << MakeObj(1).Me().member << std::endl;
std::cout << Obj(2).Me().member << std::endl;
Obj(3).Me() = Obj(4);
return 0;
}