Информация об изменениях

Сообщение Re[4]: asio готовится к принятию в стандарт? от 17.05.2015 9:39

Изменено 17.05.2015 9:40 niXman

Здравствуйте, fdn721, Вы писали:

F>А как? Ну вот к примеру стандартная ситуация:

F>
F>class MyClient
F>{
F>protected:
F>  tcp::socket m_socket;

F>public:
F>  bool Open()
F>  {
F>    ....
F>    m_socket.async_connect( m_endpoint, boost::bind( &MyClient::HandleConnect, this, _1 ) );
F>  }

F>  void Close()
F>  {
F>    m_socket.close()
F>  }

F>protected:
F>  void HandleConnect(  const boost::system::error_code& err )
F>  {
F>    //do somthing
F>  }

F>}

F>int main()
F>{
F>  ...
F>  MyClient *client = new MyClient();
F>  client->Open();
F>  client->Close();   //<<---- Тут ASIO запланирует вызов HandleConnect со значением error::operation_aborted.
F>  delete client;     //<<---- А сам вызов HandleConnect может быть уже после удаления client.
F>  ...
F>}
F>

F>Как с этим бороться без кучи костылей???
нет смысло говорить о "высоком", видя в коде такое:

MyClient *client = new MyClient();
...
delete client;

поверьте, не в asio ваши проблемы
Здравствуйте, fdn721, Вы писали:

F>А как? Ну вот к примеру стандартная ситуация:

F>
F>class MyClient
F>{
F>protected:
F>  tcp::socket m_socket;

F>public:
F>  bool Open()
F>  {
F>    ....
F>    m_socket.async_connect( m_endpoint, boost::bind( &MyClient::HandleConnect, this, _1 ) );
F>  }

F>  void Close()
F>  {
F>    m_socket.close()
F>  }

F>protected:
F>  void HandleConnect(  const boost::system::error_code& err )
F>  {
F>    //do somthing
F>  }

F>}

F>int main()
F>{
F>  ...
F>  MyClient *client = new MyClient();
F>  client->Open();
F>  client->Close();   //<<---- Тут ASIO запланирует вызов HandleConnect со значением error::operation_aborted.
F>  delete client;     //<<---- А сам вызов HandleConnect может быть уже после удаления client.
F>  ...
F>}
F>

F>Как с этим бороться без кучи костылей???
нет смысла говорить о "высоком", видя в коде такое:

MyClient *client = new MyClient();
...
delete client;

поверьте, не в asio ваши проблемы