私はcommands
のパーサ(大規模なデータ配列の周りの派手なラッパー)で作業しており、未処理のコマンドが存在するキューを持っています。私は、コマンドが必要な場合は、私はこのようなコードでそれを照会:オブジェクトをキューから移動することは大丈夫ですか?
boost::optional<command> get_command() {
if (!has_command()) return boost::optional<command>(nullptr);
else {
boost::optional<command> comm(command_feed.front()); //command_feed is declared as a std::queue<command>
command_feed.pop();
return comm;
}
}
問題があるが、これらのコマンドは、適切な状況の下で、サイズはメガバイトこと、そしてかなり早く解析する必要がある可能性があります。
boost::optional<command> get_command() {
if (!has_command()) return boost::optional<command>(nullptr);
else {
boost::optional<command> comm(std::move(command_feed.front())); //command_feed is declared as a std::queue<command>
command_feed.pop();
return comm;
}
}
そして、この特定のケースのために働くように見えるが、これは、任意の適切に維持RAIIオブジェクトへの汎用ソリューションとして使用することができ、または:私の考えは、私はそうのような動きにtransferalを最適化するということでした私は何か他のことをしなければなりませんか?
はい、そう長く**あなたがそれを行うだけ**の事はそれを –
@SteveLorimerをポップか、それを再割り当てであるとして、それは安全である移動。また、前提条件なしで他の操作を行うこともできます。 –
@Revolver_Ocelot割り当ては、必ずしも前提条件がないわけではありません。 –