内部状態オブジェクトを照会するクラスがあります。
class State {...}; //Has a copy and move constructor
class Processor
{
private:
std::unique_ptr<State> state;
public:
void process(...)
{
State newState;
... //create this new state
state.reset(new State(newState));
}
State getState()
{
return std::move(*state.release());
}
};
これは適切な使用法std::move
ですか?getState
への呼び出しごとに1回だけ呼び出されることを保証できますが、この特定のシステムの設計のため、からprocess
戻ることはできません。Stack Overflowやその他の場所に関する他の回答の多くは、コンパイラがオブジェクトを移動するか、可能であればRVOするため、オブジェクトを返す方がよいと述べていますが、返されたオブジェクトが関数に対してローカルである場合はすべてでした。 。newState
process
状態オブジェクトがunique_ptrの背後にある必要は必ずしもありませんが、それは新しい状態オブジェクトを管理するための最も簡単な方法のように思えました。私の実際の実装では、最後にunique_ptrに直接転送されるポインターがあります。