Custom deleters with `std::unique_ptr` and `std::shared_ptr`
Weak pointers and `std::shared_ptr`
Thread safety with `std::shared_ptr`
Differences between `std::shared_ptr` and raw pointers
Differences between `std::unique_ptr` and raw pointers