std::enable_shared_from_this allows a class to have a valid
this. Simply adding a member function that returns
shared_ptr<T>(this) is susceptible to double-free. But when would you use such a feature? It's a relevant question because, next time when you see
std::enable_shared_from_this in other people's class, you would have a pretty good idea of what they are trying to do.
I think it's because the class's member function interacts with other threads (or eventbases) that need
this to be alive. It's usually a separate thread or eventbase because otherwise when a member function is sending
this to another object,
this is obviously alive and can outlive the interaction. So a common scenario is that the class is managing (or co-managing) a thread-pool, or eventbase, e.g. for scheduling async jobs.