What is the point for a class T to inherit from std::enable_shared_from_this<T> ? I can't seem to figure out why you wouldn't just create a std::shared_ptr<this> ?
Asked
Active
Viewed 123 times
0
jojeyh
- 276
- 1
- 3
- 12
-
First of all, `this` isn't a type, you can't give it as a template argument to `shared_ptr`. Then the purpose is to allow safe creation of `shared_ptr` to `this` in the object. – Rerito Nov 14 '17 at 12:08
1 Answers
1
Cppreference has a good example on why.
If you want to return a std::shared_ptr of this while *this is already owned by a std::shared_ptr and you don't return shared_from_this() but return a new std::shared_ptr<T>(this) instead then you will end up with 2 shared pointers that don't know they're both owning the same object and thus the use_count() will be wrong which will cause a double delete, which is undefined behavior.
Hatted Rooster
- 35,759
- 6
- 62
- 122