I have a function which takes a shared_ptr
.
In some member function memfun
of MyClass
, I need to pass this
1) It depends on what you mean by "do this" as to whether or not you can. You can always construct a shared_ptr
from a raw pointer such as this
, but it won't share the reference count with another shared_ptr
instance that was separately constructed from a raw pointer. You will thus need to use a custom deleter on one or other instance to avoid double deletions, but unless you take great care then you may end up with dangling shared_ptr
instances due to the object being deleted through one, but still accessible from another.
shared_from_this
enables you to guarantee that if you have one shared_ptr
instance to your object then you can construct another without copying the first, and that these instances will share the reference count. You could achieve this by storing a weak_ptr
as a class member, and setting that value when you first allocate a shared_ptr
to your object.
2) Calling shared_from_this()
requires that there is at least one shared_ptr
instance already pointing to your object. If you use it on an automatic object without a shared_ptr
instance with a custom deleter then you will get bad stuff happening.
3) If you derive from your class then the enable_shared_from_this
functionality will give you a shared_ptr
to the base class (the one that derived from enable_shared_from_this
). You could then use static_pointer_cast
or dynamic_pointer_cast
to cast the result of shared_from_this()
to a pointer to the derived class.