Advantages of using `std::shared_ptr`
Advantages of using `std::unique_ptr`
Ownership transfer with `std::unique_ptr` and `std::shared_ptr`
Memory management with `std::unique_ptr` and `std::shared_ptr`
Differences between `std::unique_ptr` and `std::shared_ptr`