Durch die Beispiele der Asio-Bibliothek, this one for example (zum Beispiel, Zeile 37), sehe ich, dass sie manchmal einen gemeinsamen Zeiger von diesem erstellen (sie selbst nennen), und nehmen Sie es in einem Lambda auf, wo sie einige Asio-Funktionen nennen, aber ich verstehe nicht, was der Zweck davon ist. Ich sehe es nicht einmal benutzt.Asio: Verwendung von selbst geteilten Zeiger in den Beispielen
Also, warum tun sie das?
Relevante Code:
..in der Serverklasse ... (wo eine Sitzung erstellt wird)
if (!ec)
{
std::make_shared<session>(std::move(socket_))->start();
}
... session::start()
Mitglied Methode:
void start()
{
do_read();
}
... session::do_read()
Mitglied Methode (wo mein Punkt von Interesse ist): der dieser Zeiger) aus der Klasse Objekt
void do_read()
{
auto self(shared_from_this()); // <<< ---WHY THIS??????
socket_.async_read_some(asio::buffer(data_, max_length),
[this, self](std::error_code ec, std::size_t length)
{
if (!ec)
{
do_write(length);
}
});
}