In my trade busting project, I once created a local object, and used its address to construct a shared_ptr (under an alias like TradePtr).
Luckily, I hit consistent crashes. I think the reason is — shared_ptr likes heap objects. When my function returns, the shared_ptr tried to call delete on the raw ptr, which points at the local stack, leading to crash.
The proven solution — make_shared()