Я в ситуации в многопоточной среде, где у меня есть поток, который получает данные из сокета, и я хочу отправить эти данные в очередь сообщений.
Например, что-то вроде этого:
char buf[N];
size_t len = ::recv(buf, ...);
queue.send([buf,len] {
//stuff
});
Но это не сработает, так как buf
может выйти из области видимости или перезаписать следующий ::recv()
. Теперь я МОЖЕТ скопировать его в string
/std::vector
/все и передать эту вещь по значению:
char buf[N];
size_t len = ::recv(buf, ...);
std::string my_data(buf, len);
queue.send([my_data](){ /* stuff */ });
Но у меня есть дополнительная копия, верно? Есть ли способ получить такую же функциональность без дополнительных накладных расходов?