Boosten Sie async_ * -Funktionen und shared_ptrs

Ich sehe dieses Muster häufig in Code, bindendshared_from_this als ersten Parameter an eine Member-Funktion übergeben und das Ergebnis mit einemasync_* Funktion. Hier ist ein Beispiel aus einer anderen Frage:

void Connection::Receive()
{
     boost::asio::async_read(socket_,boost::asio::buffer(this->read_buffer_),
        boost::bind(&Connection::handle_Receive, 
           shared_from_this(),
           boost::asio::placeholders::error,
           boost::asio::placeholders::bytes_transferred));
 }

Der einzige Grund zu benutzenshared_from_this() anstattthis soll das Objekt am Leben erhalten, bis die Mitgliedsfunktion aufgerufen wird. Aber es sei denn, es gibt irgendwo eine Art Boost-Magie, seit demthis Zeiger ist vom TypConnection*, das ist alleshandle_Receive kann dauern, und der zurückgegebene Smart Pointer sollte sofort in einen regulären Pointer konvertiert werden. In diesem Fall gibt es nichts, was das Objekt am Leben hält. Und natürlich gibt es keinen Hinweis auf einen Anrufshared_from_this.

Ich habe dieses Muster jedoch so oft gesehen, dass ich nicht glauben kann, dass es so völlig kaputt ist, wie es mir scheint. Gibt es eine Boost-Magie, die bewirkt, dass shared_ptr später, wenn der Vorgang abgeschlossen ist, in einen regulären Zeiger konvertiert wird? Wenn ja, ist dies irgendwo dokumentiert?

Ist irgendwo dokumentiert, dass der gemeinsame Zeiger bestehen bleibt, bis der Vorgang abgeschlossen ist? Berufungget_pointer Es reicht nicht aus, den starken Zeiger zu aktivieren und dann die Mitgliedsfunktion für den zurückgegebenen Zeiger aufzurufen, es sei denn, der starke Zeiger wird erst zerstört, wenn die Mitgliedsfunktion zurückkehrt.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage