in den 11 Beispielen ++ Boost.Asio C gibt es Schnipsel like the following:Warum erfassen Sie dies und Shared-Pointer-to-this in Lambdas?
void do_read()
{
auto self(shared_from_this());
socket_.async_read_some(boost::asio::buffer(data_, max_length),
[this, self](boost::system::error_code ec, std::size_t length)
{
if (!ec)
{
do_write(length);
}
});
}
Ich verstehe, warum die self
Zeiger die Klasse am Leben zu halten (siehe this question) benötigt wird, aber ich verstehe nicht, warum die this
Zeiger ist auch erfasst. Ist es nur so, dass der Autor do_write(length)
anstelle von self->do_write(length)
schreiben kann oder gibt es einen anderen Grund?
In einem Wort: Bequemlichkeit. – sehe