Efficient use of `std::unique_ptr` and `std::shared_ptr`
Converting `std::shared_ptr` to `std::unique_ptr`
Converting `std::unique_ptr` to `std::shared_ptr`
Using `std::make_shared` with `std::shared_ptr`
Using `std::make_unique` with `std::unique_ptr`