= std::make_shared<MsgType>(std::forward<MsgType>(msg));
http::async_write(stream_, *sp,
[ptr = shared_from_this(), sp] (auto && ...args) {
ptr->on_write(sp->need_eof(), std::forward<decltype(args)>(args)...);
}
);
Если в лямде используется как выше: [ptr = shared_from_this(), sp], то все ок, однако если написать sp = std::move(sp), то происходит ошибка сегментирования.
Очевидно, где-то UB, но вот из-за чего тут возникает UB можете подсказать? shared_ptr не movable-тип?
shared_ptr мувается
shared_ptr точно movable.
Тут sp передаётся два раза, как параметр и в захват лямбды, если ты его мувнёшь сразу при создании лямбды, с чем будет работать метод http::async_write(stream_, *sp ?
То есть смотри, тут в общем UB будет, при захвате оно move-нётся, и потом при вычислении параметра *sp оно должно быть использовано. Эти два действия не упорядочены относительно друг друга в выражении.
Обсуждают сегодня