Использование std::enable_shared_from_this
Почему при наследовании от enable_shared_from_this с модификатором private, следующий код приводит к выбросу исключения при вызове shared_from_this:
class A : std::enable_shared_from_this<A>
{
public:
A(): std::enable_shared_from_this<A>()
{
}
std::shared_ptr<A> getPtr()
{
return shared_from_this();
}
};
int main()
{
std::shared_ptr<A> a = std::make_shared<A>();
std::shared_ptr<A> a2 = a->getPtr();
}
а если наследовать с модификатором public то все работает?
Ответы (1 шт):
Автор решения: AR Hovsepyan
→ Ссылка
Потому что: конструктор std::enable_shared_from_this защищенный, и, следовательно, конструировать его может только наследник. Закрытое наследование не делает целевой класс наследником. Целевой класс позволяет корректно создавать std::shared_ptr или weak_ptr с использованием указателя this, он должен являться(а не просто использовать) std::enable_shared_from_this(это есть требование), поэтому наследование должно быть открытым.