Boost.Asioで非同期通信を書いていると、送受信のためのバッファをメンバ変数に持つ必要が出てきて、局所化が難しい場合があります。 この解決策として、以下のようなイディオムを使うことで送受信バッファをローカル変数化することができます: 送受信バッファをshared_ptrで包む async_read, async_writeにshared_ptrを間接参照したバッファを渡す このままでは送受信関数のスコープを抜けた時点でshared_ptrが消えてしまう 送受信のハンドラにshared_ptrのバッファをbindする io_serviceは内部でハンドラ関数のキューをメンバ変数として管理してるので、bindされたshared_ptrのバッファはハンドラの呼び出しが終了するまで寿命が尽きない つまり、メンバ変数の管理を、部分適用されたハンドラとio_serviceで隠してしまうのです。