マルチスレッド環境で、ソケットからデータを受信するスレッドがあり、そのデータをメッセージング キューに送信したいと考えています。
たとえば、次のようなものです。
char buf[N];
size_t len = ::recv(buf, ...);
queue.send([buf,len] {
//stuff
});
しかし、それbuf
は範囲外になるか、次の によって上書きされる可能性があるため、機能しません::recv()
。今、私はそれを/ / whateverにコピーして、それを値で渡すことができます:string
std::vector
char buf[N];
size_t len = ::recv(buf, ...);
std::string my_data(buf, len);
queue.send([my_data](){ /* stuff */ });
しかし、余分なコピーが発生していますよね?追加のオーバーヘッドなしで同じ機能を実現する方法はありますか?