特定のオブジェクトが一時オブジェクトとしてのみ作成されることを知っています(これはライブラリ内のプライベートメンバーオブジェクトです)。場合によっては、そのオブジェクトは、メンバー関数をチェーン化することによってさらに初期化されます(TempObj().Init("param").Init("other param")
)。その一時インスタンスを使用して別のオブジェクトの移動構築を有効にしたいので、について何か間違っていることがあるかどうか疑問に思いましたreturn std::move(*this)
。
struct TempObj
{
TempObj &&Member() { /* do stuff */ return std::move(*this); }
};
struct Foo
{
Foo(TempObj &&obj);
};
// typical usage:
Foo foo(TempObj().Member());
これと機能的に同等ですか?
struct TempObj
{
TempObj(TempObj &&other);
TempObj Member() { /* do stuff */ return *this; }
};
Foo foo(TempObj().Member());