我处于多线程环境中的情况,我有一个从套接字接收数据的线程,并且我想将该数据发送到消息传递队列中。
例如,像这样:
char buf[N];
size_t len = ::recv(buf, ...);
queue.send([buf,len] {
//stuff
});
但这不起作用,因为buf
可能超出范围,或者被 next 覆盖::recv()
。现在我可以将它复制到/ / whatever并按值传递那个东西:string
std::vector
char buf[N];
size_t len = ::recv(buf, ...);
std::string my_data(buf, len);
queue.send([my_data](){ /* stuff */ });
但是我会产生额外的副本,对吗?有没有办法在没有额外开销的情况下获得相同的功能?