Я пытаюсь сделать что-то, что, по моему мнению, довольно распространено, но у меня возникли некоторые проблемы.
Я использую 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();
Функция для добавления клиента:
Код: Выделить всё
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]
Мобильная версия