Я проверяю этот пример сервера SSL и задаюсь вопросом, зачем использовать shared_ptr
. Он начинается со следующего метода (do_accept()
) и непрерывно использует auto self(shared_from_this())
в классе session
для увеличения продолжительности жизни между обработчиками.
Q: Можно ли использовать tcp::socket
член внутри session
класса и избегать shared_ptr
? Какую модификацию нужно применить?
void do_accept()
{
acceptor_.async_accept(
[this](const boost::system::error_code& error, tcp::socket socket)
{
if (!error)
{
std::make_shared<session>(std::move(socket), context_)->start();
}
do_accept();
}
);
}
Внутри session
Класс:
void do_handshake()
{
auto self(shared_from_this());
socket_.async_handshake(boost::asio::ssl::stream_base::server,
[this, self](const boost::system::error_code& error)
{
if (!error)
{
do_read();
}
}
);
}