Because that's the most convenient way to write this code. There's no harm in starting asyncronous operations before their completion can be handled, as long as they are handled at some point. If they complete before the service starts, then they are queued until it does.
The constructor could dispatch the start_accept
function to the io_service
if you really wanted to defer it until the service is running, but that would just add extra complication, and a delay, for no benefit.