При разрушении io_service выполняет следующую последовательность операций:
Для каждого объекта обслуживания svc в наборе io_service в обратном порядке начала срока службы объекта обслуживания выполняет svc->shutdown_service().
Невызванные объекты обработчика, которые были запланированы для отложенного вызова на io_service, или любая связанная нить, уничтожаются.
Для каждого объекта обслуживания svc в наборе io_service, в обратном порядке начала срока службы объекта обслуживания, выполняет deletestatic_cast<io_serviceservicesvc).
Описанная выше последовательность уничтожения позволяет программам упростить управление ресурсами с помощью shared_ptr<>. Если время жизни объекта привязано к времени жизни соединения (или некоторой другой последовательности асинхронных операций), shared_ptr к объекту будет связан с обработчиками для всех асинхронных операций, связанных с ним. Это работает следующим образом:
Когда одно соединение заканчивается, все асинхронные операции завершаются. Соответствующие объекты обработчика уничтожаются, и все ссылки shared_ptr на объекты уничтожаются.
Чтобы закрыть всю программу, функция io_servicestop() призвана как можно скорее прекратить любые вызовы run(). Определенный выше деструктор io_service уничтожает все обработчики, в результате чего все ссылки shared_ptr на все объекты соединения должны быть уничтожены.
Статья io_service::~io_service раздела Boost.Asio io_service может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.