Я использую простой tcp сервер из boost :: asio, который можно найти
Вот.
Работает нормально (Boost 1.51, VC ++ 2012).
Но когда я пытаюсь изменить typedef connection_ptr
от
typedef boost::shared_ptr<connection> connection_ptr;
в
typedef std::shared_ptr<connection> connection_ptr;
сервер все еще работает, но он падает после завершения соединения. Это происходит в менеджер соединений в методе stop
,
Кажется, что удаление Boost shared_ptr работает, но вы не можете удалить STD shared_ptr? почему это так?
относительно вашего комментария
Я удалил это наследство и просто передал новый экземпляр
shared_ptr каждый раз
Не делайте этого, это побеждает цель std::shared_ptr
, Вам нужно использовать std::enable_shared_from_this
а также shared_from_this()
увеличить счетчик ссылок, создав еще один экземпляр shared_ptr
с тем же pointee будет просто вызывать проблемы, такие как нарушения доступа к памяти.
Других решений пока нет …