Сообщение Re[2]: enable_shared_from_this<> и удаление наследников от 28.09.2016 9:24
Изменено 28.09.2016 9:30 uzhas
Здравствуйте, szag, Вы писали:
S>ИМХО, тут все точно так же как и при обычном наследовании и использовании указателя на базовый класс — нужен виртуальный деструктор, а иначе UB. Сам по себе enable_shared_from_this не делает виртуальных деструкторов.
ну почему же
здесь вполне может быть все интереснее
мы ведь помним, что shared_from_this() работает только после того, как объект уже положили в некоторый shared_ptr и там же уже сидит некоторый deleter. если deleter не приводит к UB, то все окей
вопрос (или ответ) в целом никак не связан с наследованием от std::enable_shared_from_this
S>ИМХО, тут все точно так же как и при обычном наследовании и использовании указателя на базовый класс — нужен виртуальный деструктор, а иначе UB. Сам по себе enable_shared_from_this не делает виртуальных деструкторов.
ну почему же
здесь вполне может быть все интереснее
struct user_context: session {};
auto p = make_shared<user_context>(); // deleter is captured here, he knows real type is user_context
мы ведь помним, что shared_from_this() работает только после того, как объект уже положили в некоторый shared_ptr и там же уже сидит некоторый deleter. если deleter не приводит к UB, то все окей
вопрос (или ответ) в целом никак не связан с наследованием от std::enable_shared_from_this
Re[2]: enable_shared_from_this<> и удаление наследников
Здравствуйте, szag, Вы писали:
S>ИМХО, тут все точно так же как и при обычном наследовании и использовании указателя на базовый класс — нужен виртуальный деструктор, а иначе UB. Сам по себе enable_shared_from_this не делает виртуальных деструкторов.
ну почему же
здесь вполне может быть все интереснее
мы ведь помним, что shared_from_this() работает только после того, как объект уже положили в некоторый shared_ptr и там же уже сидит некоторый deleter. если deleter не приводит к UB, то все окей
вопрос (или ответ) в целом никак не связан с наследованием от std::enable_shared_from_this
S>ИМХО, тут все точно так же как и при обычном наследовании и использовании указателя на базовый класс — нужен виртуальный деструктор, а иначе UB. Сам по себе enable_shared_from_this не делает виртуальных деструкторов.
ну почему же
здесь вполне может быть все интереснее
struct user_context: session {};
shared_ptr<session> p(new user_context()); // deleter is captured here, he knows real type is user_context
мы ведь помним, что shared_from_this() работает только после того, как объект уже положили в некоторый shared_ptr и там же уже сидит некоторый deleter. если deleter не приводит к UB, то все окей
вопрос (или ответ) в целом никак не связан с наследованием от std::enable_shared_from_this