| Home | Libraries | People | FAQ | More

#### io_service::~io_service

Destructor.

    ~io_service();

On destruction, the `io_service` performs the following sequence of operations:

- For each service object svc in the io_service set, in reverse order of the beginning of service object lifetime, performs svc->shutdown_service().
- Uninvoked handler objects that were scheduled for deferred invocation on the io_service, or any associated strand, are destroyed.
- For each service object svc in the io_service set, in reverse order of the beginning of service object lifetime, performs delete static_cast<io_service::service*>(svc).

###### Remarks

The destruction sequence described above permits programs to simplify their resource management by using `shared_ptr<>`. Where an object's lifetime is tied to the lifetime of a connection (or some other sequence of asynchronous operations), a `shared_ptr` to the object would be bound into the handlers for all asynchronous operations associated with it. This works as follows:

- When a single connection ends, all associated asynchronous operations complete. The corresponding handler objects are destroyed, and all shared_ptr references to the objects are destroyed.
- To shut down the whole program, the io_service function stop() is called to terminate any run() calls as soon as possible. The io_service destructor defined above destroys all handlers, causing all shared_ptr references to all connection objects to be destroyed.