привет!
имея такой код:
struct session: std::enable_shared_from_this<session> {};
вполне понятно что будет вызван деструктор
session.
но а что произойдет, если
session унаследовать в
user_context ?
struct user_context: session {};
будет ли вызван деструктор
user_context, ведь
enable_shared_from_this ничего не знает про наследников
session?
и если будет, то почему/как?
спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, szag, Вы писали:
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
Здравствуйте, uzhas, Вы писали:
U>мы ведь помним, что shared_from_this() работает только после того, как объект уже положили в некоторый shared_ptr и там же уже сидит некоторый deleter. если deleter не приводит к UB, то все окей
U>вопрос (или ответ) в целом никак не связан с наследованием от std::enable_shared_from_this
согласен, если нигде не будет перехода на raw pointer, то будет работать и без виртуального деструктора, но я бы сделал деструктор session виртуальным и спал спокойно