Using `std::weak_ptr` with `std::shared_ptr`
Converting `std::shared_ptr` to raw pointer
Converting `std::unique_ptr` to raw pointer
Using `std::shared_ptr` with raw pointers
Using `std::unique_ptr` with raw pointers