Я работал над синтаксическим анализатором для 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, или я должен делать что-то еще?