
I have a Server class inherited from a Listener class, with the latter being bases on the boost::asio example code. My problem is that the Listener class requires am boost::asio::io_service & in order to initialize its member variables. I wanted the Server class to be responsible for starting a thread, owning the io_service, and running it. It seems I cannot do that! class Server : public Listener { public: Server() : Listener(ioService_) { } // Snip protected: boost::asio::io_service ioService_; }; class Listener { public: Listener(boost::asio::io_service & ioService) : socket_(ioService) { } // Snip protected: boot::asio::ip::tcp::socket socket_; }; The above throws an unhandled exception in the initialization of the derived class. I suppose this is because ioService_ is not constructed yet? Since the C++ rules, if I remember correctly, say the base class gets constructed before the members of the derived? So, I tried: Server() : ioService_(), Listener(ioService_) { } to try and force it, but it still throws an exception. The only way to get it to not throw an exception is to create the instance to io-service in main() and then pass it as a reference into the class constructor. If I do that, then there is no way for any class in my inheritance hierarchy to own the io_service. As such, I cannot start and stop it either. Is there any way to get ownership of the io_service in my class hierarchy?