我有一个接收器线程。我想将消息移动到后台处理器线程的队列中。简单来说:
std::queue<zmq::message_t> qu;
zmq::message_t msg;
zmq::recv_result_t res = sock.recv(msg, zmq::recv_flags::none);
qu.push(std::move(message));
我收到错误:
include/zmq.hpp:745:5: note: declared here
745 | message_t(const message_t &) ZMQ_DELETED_FUNCTION;
即使没有
std::move
,它仍然无法工作。
我明白
zmq::message_t
不应该这样移动。正确的做法是什么(高效,无需不必要的复制)?
我希望
message_t
将保存在堆上分配的消息数据,并将在 message_t
的析构函数中释放。那么,我不明白这里的问题是什么。
你可以使用
qu.emplace(std::move(message))
相反,或者显式调用
move()
:
qu.push(message_t{});
message.move(qu.back());