C++shared_ptrshared_from_this выдает исключение bad_weak_ptr, хотя у меня есть ссылка на негоC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 C++shared_ptrshared_from_this выдает исключение bad_weak_ptr, хотя у меня есть ссылка на него

Сообщение Anonymous »

РЕДАКТИРОВАТЬ: Я так и не понял этого — я реорганизовал код, чтобы он был практически идентичен образцу Boost, но проблема все еще оставалась. Если у кого-то еще есть эта проблема, возможно, у вас более распространенный вызов Shared_from_this(), когда не существует Shared_ptr (или в конструкторе). В противном случае я рекомендую просто выполнить пересборку из образцов boost asio.

Я пытаюсь сделать что-то, что, по моему мнению, довольно распространено, но у меня возникли некоторые проблемы.

Я использую boost asio и пытаюсь создать TCP-сервер. Я принимаю соединения с помощью async_accept и создаю общие указатели. У меня есть долгоживущий объект (например, диспетчер соединений), который вставляет общий_птр в набор. Вот фрагмент:

Код: Выделить всё

std::shared_ptr ptr = std::make_shared(std::move(s));
directory.addPending(ptr);
ptr->onConnect(std::bind(&Directory::addClient, &directory, std::placeholders::_1));
ptr->onDisconnect(std::bind(&Directory::removeClient, &directory, std::placeholders::_1));
ptr->onMessage(std::bind(&Directory::onMessage, &directory, std::placeholders::_1, std::placeholders::_2));
ptr->start();
В каталоге есть std::set pendingClients;

Функция для добавления клиента:

Код: Выделить всё

void Directory::addPending(std::shared_ptr ptr){
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/37891443/c-shared-ptr-shared-from-this-throws-a-bad-weak-ptr-exception-even-though-i-h[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»