У меня есть функция, которая принимает shared_ptr<MyClass>
. В какой-то функции-члене memfun
из MyClass
мне нужно передать this
этой функции. Но если я напишу
void MyClass:memfun()
{
func(shared_ptr<MyClass>(this))
}
Я предполагаю, что после завершения вызова счетчик ссылок достигнет 0 и будет предпринята попытка уничтожить this
, что плохо.
Потом я вспомнил, что там этот класс enable_shared_from_this
с функцией shared_from_this
.
Итак, теперь я собираюсь использовать следующее:
class MyClass: public enable_shared_from_this<MyClass>
{
void MyClass:memfun()
{
func(shared_from_this());
}
};
Вопросы:
1) Абсолютно ли невозможно использовать функциональность без наследования от enable_shared_from_this
?
2) Означает ли наследование от enable_shared_from_this
, что вызов memfun для объекта с автоматическим временем хранения будет привести к чему-то плохому? Например.
int main()
{
MyClass m; //is this OK?
m.memfun(); // what about this?
}
3) Если я унаследован от MyClass, будет ли функциональность enable_shared_from_this правильно унаследована или мне нужно будет унаследоваться снова? Это,
class MyCoolClass: public Myclass
{
void someCoolMember
{
someCoolFuncTakingSharedPtrToMyCoolClass(shared_from_this());
}
}
Это нормально? Или правильно следующее?
class MyCoolClass: public Myclass, public enable_shared_from_this<MyCoolClass>
{
void someCoolMember
{
someCoolFuncTakingSharedPtrToMyCoolClass(enable_shared_from_this<MyCoolClass>::shared_from_this());
}
}
Большое спасибо заранее.