A smart pointer is a class that holds and manages a pointer through a popular C++ technique called “Resource Acquisiton is Initialization” (RAII). It allows developers to not worry about freeing a pointer, and it also allows pointers to be exception-safe.
When refering to memory, ownership answers the question: “Who is in charge of freeing the given resource?”
There are three standard smart pointers defined in the
<memory> header file:
std::unique_ptr<T>A unique pointer does not share ownership, and will free the resource at the end of the scope.
std::shared_ptr<T>A shared pointer does share ownership, and will only free the resource when there are no other owners counted and it has reached the end of the scope.
std::weak_ptr<T>A weak pointer is used with a shared pointer, but it does not add to the reference counter like a shared pointer does.
shared_ptr have a corresponding function to create their respective pointers: