Skip to content
C++

Smart Pointers

unique_ptr, shared_ptr, weak_ptr.

By EZ4Code Team
smart-pointermemory

Code

#include <memory>
#include <iostream>

class Resource {
public:
    Resource() { std::cout << "acquired\n"; }
    ~Resource() { std::cout << "destroyed\n"; }
    void use() { std::cout << "using\n"; }
};

int main() {
    // unique_ptr: exclusive ownership
    auto up = std::make_unique<Resource>();
    up->use();
    // auto up2 = up; // Error: cannot copy
    auto up2 = std::move(up); // Transfer ownership

    // shared_ptr: shared ownership
    auto sp1 = std::make_shared<Resource>();
    auto sp2 = sp1; // Reference count +1
    std::cout << "count: " << sp1.use_count() << "\n"; // 2

    // weak_ptr: doesn't increase ref count
    std::weak_ptr<Resource> wp = sp1;
    if (auto locked = wp.lock()) {
        locked->use();
    }

    // Custom deleter
    std::shared_ptr<FILE> file(fopen("test.txt", "w"), fclose);
    return 0;
}

Explanation

unique_ptr owns exclusively; shared_ptr shares via reference counting; weak_ptr avoids circular references.

More C++ Snippets