Ошибка bad_weak_ptr, Реализация асинхронного сервера c умными указателями |
Здравствуйте, гость ( Вход | Регистрация )
Ошибка bad_weak_ptr, Реализация асинхронного сервера c умными указателями |
medhaid |
14.1.2012, 0:07
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 13.1.2012 Пользователь №: 3130 Спасибо сказали: 0 раз(а) Репутация: 0 |
Здравствуйте, не пойму откуда взялась ошибка...
выдается исключение bad_weak_ptr после вызова метода... socketTCP->async_read_some(boost::asio::buffer(recvBuffer), boost::bind(&Client::handle_read, this->shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred)); //handle_read, handle_write - статическая функция класса Client.. если знаете в чём проблема просьба пояснить почему возникает исключение на моём примере....
консоль: accept connect Exception: tr1::bad_weak_ptr Для продолжения нажмите любую клавишу . . . |
|
|
medhaid |
14.1.2012, 1:00
Сообщение
#2
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 13.1.2012 Пользователь №: 3130 Спасибо сказали: 0 раз(а) Репутация: 0 |
Как дурак пишу вопросы и сам на них отвечаю)))
искал и наконец нашёл решение))) //перевод с буржуйского форума.. Перед вызовом shared_from_this() ваш класс должен быть сохранен в shared_ptr . Это означает, что вы не можете назвать shared_from_this() внутри конструктора, так как линия объект не будет помещен в shared_ptr пока конструктор закончена. Именно по этой причине, что классы, которые используют enable_shared_from_this как правило, имеют start функция, которая делает последние шаги инициализации, которые требуют использования shared_from_this() . Это начало функция должна быть вызвана после Объект полностью построен, и поэтому не может быть вызван из внутри конструктора, как вы делаете. P.S. извиняюсь что создал тему зря.... |
|
|
ViGOur |
14.1.2012, 11:57
Сообщение
#3
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
medhaid, всё нормально.
Из этого видно, что ты не бот и думающий программер! Да и наверняка твой ответ кому-нибудь еще пригодится... |
|
|
Текстовая версия | Сейчас: 22.11.2024, 10:52 |