# C++ shared_ptr **[shared_ptr](https://en.cppreference.com/w/cpp/memory/shared_ptr)** is a reference-counted smart pointer that allows multiple owners to share ownership of the same object. The object is automatically deleted when the last `shared_ptr` is destroyed. Use `shared_ptr` when multiple objects need to share and extend the lifetime of a resource. Prefer `unique_ptr` when ownership is exclusive; use `shared_ptr` only when shared ownership is actually needed. ## Example This example shows reference counting and shared ownership of a resource. ```cpp // compile: g++ -o shared shared.cpp // run: ./shared // description: multiple shared_ptr instances share ownership #include #include class Resource { public: Resource() { std::cout << "Resource allocated\n"; } ~Resource() { std::cout << "Resource freed\n"; } }; int main() { { std::shared_ptr r1 = std::make_shared(); std::cout << "Use count: " << r1.use_count() << "\n"; { std::shared_ptr r2 = r1; std::cout << "Use count: " << r1.use_count() << "\n"; } // r2 destroyed, use count decreases std::cout << "Use count: " << r1.use_count() << "\n"; } // r1 destroyed, resource freed return 0; } ```