Pointers

Learn about pointers in C++, including unique, shared, and weak pointers.

Smart pointers

The smart pointers from the standard library wrap a raw pointer and make the ownership of the object it points to explicit. When used correctly, there is no doubt about who is responsible for deleting a dynamic object. The three smart pointer types are:

  • std::unique_ptr
  • std::shared_ptr
  • std::weak_ptr

As their names suggest, they represent three types of ownership of an object:

  • Unique ownership expresses that I, and only I, own the object. When done using it, I will delete it.

  • Shared ownership expresses that I own the object along with others. When no one needs the object anymore, it will be deleted.

  • Weak ownership expresses that I’ll use the object if it exists but don’t keep it alive just for me.

Unique pointer

The safest and least complicated ownership is unique ownership and should be the first thing that pops into your mind when thinking about smart pointers. Unique pointers represent unique ownership; that is, a resource is owned by exactly one entity. Unique ownership can be transferred to someone else, but it cannot be copied since that would break its uniqueness. Here is how to use a std::unique_ptr:

Get hands-on with 1200+ tech skills courses.