Table of Contents

C++ shared_ptr

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.

// 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;
}