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