私は最近、プロジェクトで Boost.Asio の使用を開始しました。新しく作成されたソケットの所有権を tcp::acceptor::async_accept に転送するクリーンなソリューションを誰かが知っているかどうかを知りたいと思います。これにより、この所有権が受け入れに転送されます。ハンドラー関数。
ハンドラーは一度だけ呼び出される必要があるため、これは一貫性のない欲求ではありません。
std::bind() はそのパラメーターを CopyConstructible にする必要があるため、 std::bind() をパラメーターとして std::unique_ptr<> できないことに気付きました。それだけでなく、Boost の AcceptHandler の概念も CopyConstructible である必要があります。
したがって、私のオプションは次のようになります。
- コピー コンストラクターを使用してオブジェクトを移動する非推奨の std::auto_ptr<> 方法を使用すると、Boost.Asio の新しいリリースであいまいなバグが発生する可能性があります。
- std::shared_ptr<> を使用し、ポインターが不要になったら、つまり実際のハンドラー関数に到達したときに共有所有権をポインターから取り除く方法はありません (これは、http://wwwの例でジョブが行われる方法です)。私が読んだ限りでは.boost.org/doc/libs/1_43_0/doc/html/boost_asio/examples.html )。
また
- あなたは私にとってより良い考えを持っています。
私はここでかなり途方に暮れています。誰でも私を啓発できますか?