Я пытаюсь понять, зачем вообще нужно использовать enable_shared_from_this?
Я нашел, вот такое обьяснение
https://stackoverflow.com/a/5548314/5709159
где вкратце говориться о том, что вот так плохо
struct S
{
shared_ptr<S> dangerous()
{
return shared_ptr<S>(this); // don't do this!
}
};
int main()
{
shared_ptr<S> sp1(new S);
shared_ptr<S> sp2 = sp1->dangerous();
return 0;
}
а вот так хорошо
struct S : enable_shared_from_this<S>
{
shared_ptr<S> not_dangerous()
{
return shared_from_this();
}
};
int main()
{
shared_ptr<S> sp1(new S);
shared_ptr<S> sp2 = sp1->not_dangerous();
return 0;
}
Тут вопросов нет и действительно при данном сравнении понятно, что правильно, а что нет.
Но в чем проблема сделать просто вот так
int main()
{
shared_ptr<S> sp1(new S);
shared_ptr<S> sp2 = sp1;
return 0;
}
И не нужно ничего придумывать, ни от чего наследовать и переопределять.
В чем хитрость?
Хитрость в том, что предложенный вами способ работает только за пределами членов класса. Но что если нужно создать shared_ptr на объект класса из метода этого класса? В качестве примера где это может понадобится (хотя в таком случае я предпочитаю использовать coroutines
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости