Custom allocation and deallocation functions in `std::unique_ptr` and `std::shared_ptr`
Usage of `std::enable_shared_from_this` in `std::shared_ptr`
Memory alignment with `std::unique_ptr` and `std::shared_ptr`
Destructor behavior of `std::unique_ptr` and `std::shared_ptr`
Resetting `std::unique_ptr` and `std::shared_ptr` to nullptr