Here’s a concise and practical summary of member functions in unique_ptr, shared_ptr, and weak_ptr — along with syntax and code examples.


🔐 std::unique_ptr – Exclusive ownership

✅ Key Member Functions:

Function Purpose
get() Returns raw pointer
release() Releases ownership and returns raw pointer
reset(ptr) Deletes current, takes ownership of new ptr
swap(other) Swaps with another unique_ptr
operator* / -> Dereference / Access members

🔧 Code Example:

#include <iostream>
#include <memory>

struct Demo { void hello() { std::cout << "Hello\\n"; } };

int main() {
    std::unique_ptr<Demo> uptr = std::make_unique<Demo>();

    uptr->hello();              // operator->

    Demo* raw = uptr.get();     // get()
    
    uptr.release();             // releases ownership; must delete manually!
    // delete raw; // Uncomment to avoid leak

    uptr.reset(new Demo());     // reset to new object

    std::unique_ptr<Demo> uptr2 = std::make_unique<Demo>();
    uptr.swap(uptr2);           // swap pointers
}

👥 std::shared_ptr – Shared ownership

✅ Key Member Functions:

Function Purpose
use_count() Returns number of shared_ptrs sharing ownership
unique() Checks if it’s the only owner
reset() Drops ownership (or resets to new object)
get() Returns raw pointer
swap() Swaps with another shared_ptr

🔧 Code Example:

#include <iostream>
#include <memory>

struct Demo { void hello() { std::cout << "Shared\\n"; } };

int main() {
    std::shared_ptr<Demo> sp1 = std::make_shared<Demo>();
    std::shared_ptr<Demo> sp2 = sp1;       // shared ownership

    std::cout << sp1.use_count() << "\\n";  // 2
    std::cout << std::boolalpha << sp1.unique() << "\\n"; // false

    sp2.reset();                           // sp1 is still valid
    std::cout << sp1.use_count() << "\\n";  // 1
}

👁️ std::weak_ptr – Non-owning observer

✅ Key Member Functions:

Function Purpose
lock() Returns shared_ptr if object still exists
expired() Checks if managed object is destroyed
reset() Resets the weak_ptr
use_count() Number of shared owners

🔧 Code Example: