奇怪的成员在课堂上重置

时间:2015-05-22 05:18:02

标签: c++

我在静态库中有一个类,如下所示:

connection.h

    struct impl;

    class connection
    {
    public:
        connection(boost::asio::io_service & io_service, std::string host, int port, std::string login_id, std::string authentication);
        ~connection();

        void initialize();

    private:
        //SFL::IO::SFIOManagerPtr* m_io_manager;
        //SFL::MSG::SFProtocolPtr* m_protocol;
        void timer_callback(const boost::system::error_code& error);
        impl* _impl;
    };

构造函数:

connection::connection(boost::asio::io_service & io_service, std::string host, int port, std::string login_id, std::string authentication)
{
    _impl = new impl(io_service);
    _impl->_host = host;
    _impl->_port = port;

    //m_io_manager = new SFL::IO::SFIOManagerPtr(new SFL::IO::SFIOManager());
    _impl->_endpoint = new customendpoint(ST_API_SERVER, 0, login_id, authentication);

    std::cout << "connection" << std::endl;
}

然后我从.exe中使用它:

boost::asio::io_service io_service;
snap::external_api::connection *conn = new snap::external_api::connection(io_service, "10.1.1.74", 5091, "mdl", "mdl");
//At this point, connection->_impl is initialized and valid.
conn->initialize();
//But here, when I go into connection::initialize(), the _impl member is null.

问题出在最后一个代码示例的注释中。在构造函数之后,conn的成员是有效的。但是当控件进入connection::initialize()时,成员(_impl)变为NULL。为什么会这样?

编辑:

class customendpoint : public SNClientEndpoint
    {
    public:
        customendpoint(int type, int tc, std::string loginId, std::string auth)
            :SNClientEndpoint(type, tc, loginId, auth)
        {
        }

        void OnOpen(const SFL::SFErrorCode& ec, bool& startRead)
        {
            Login();
        }
    };

    struct connection_settings
    {
        char type;
        std::string address;

        int id_type;
        std::string login_id;
        std::string authentication;
    };

    struct impl
    {
        int _client_type;
        customendpoint* _endpoint;
        bool _enabled;
        boost::asio::io_service& _io_service;
        connection_settings _conn_settings;
        boost::asio::deadline_timer _timer;
        std::string _host;
        int _port;

        impl(boost::asio::io_service& io_service)
            :_io_service(io_service), _timer(io_service)
        {
        }
    };

initialize()函数:

void connection::initialize()
{
    SFL::MSG::SFProtocolPtr protocol(new protocol_type()); /// protocol for DBAccess thread handler

    snap::ctrl::consumer::SNControl *control = new snap::ctrl::consumer::SNControl();
    control->Initialize(protocol);
    _impl->_endpoint->SetProtocol(protocol);
}

0 个答案:

没有答案