Зачем использовать shared_ptr в этом примере буст SSL-сервера - PullRequest
1 голос
/ 06 апреля 2020

Я проверяю этот пример сервера 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();
            }
        }
    );
}

...