I read the boost asio http server example code (see http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/example/cpp11/http/server/connection.cpp) and find the auto self(shared_from_this());
variable is been used in the capture scope ([this, self]
). But the self variable is not been used in the lambda function. Then what's the benefit of doing so?
Asked
Active
Viewed 7,381 times
32
1 Answers
47
This is done in order to make sure that connection
object outlives the asynchronous operation: as long as the lambda is alive (i.e. the async. operation is in progress), the connection
instance is alive as well.

Igor R.
- 14,716
- 2
- 49
- 83
-
Good explanation. May you by any chance have an opinion on the follow-up question at http://stackoverflow.com/q/29613178/836097 ? – Vlad Didenko Apr 13 '15 at 20:40
-
May you explain why `auto self(shared_from_this());` isn't used in [client](https://www.boost.org/doc/libs/1_72_0/doc/html/boost_asio/example/cpp11/ssl/client.cpp) example (while [server](https://www.boost.org/doc/libs/1_72_0/doc/html/boost_asio/example/cpp11/ssl/server.cpp) used that) ? – SAMPro Apr 04 '20 at 10:41
-
@SAMPro because in client example there's nothing that would be managed via `shared_ptr`. The `client` instance in that example has an automatic storage. – Igor R. Apr 04 '20 at 16:58