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.
This example shows reference counting and shared ownership of a resource.
// compile: g++ -o shared shared.cpp // run: ./shared // description: multiple shared_ptr instances share ownership #include <iostream> #include <memory> class Resource { public: Resource() { std::cout << "Resource allocated\n"; } ~Resource() { std::cout << "Resource freed\n"; } }; int main() { { std::shared_ptr<Resource> r1 = std::make_shared<Resource>(); std::cout << "Use count: " << r1.use_count() << "\n"; { std::shared_ptr<Resource> 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; }