У меня есть функция, которая принимает 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());
}
}
Спасибо очень заблаговременно.