|
Boost Users : |
Subject: [Boost-users] class initialization problem
From: Christopher Pisz (cpisz_at_[hidden])
Date: 2011-09-30 19:07:23
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?
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net