-
unique_ptr, shared_ptr and weak_ptr: introduced in c++11, defined in
<memory>. They are all containers of a raw pointer.
-
auto_ptr introduced in c++11, deprecated/removed in c++17.
-
unique_ptr: Container of a owned raw pointer; does NOT allow copy but
supports std::move which transfers ownership.
-
shared_ptr implements reference counting. Can be copied. The referenced
object will be destroyed when and only when all copies of the shared_ptr
have been destroyed
-
weak_ptr: is created as a copy of a shared_ptr, which has no effect on the
shared_ptr or its other copies. After all copies of a shared_ptr have been
destoyed, all weak_ptr copies become empty