Here’s a concise and practical summary of member functions in unique_ptr, shared_ptr, and weak_ptr — along with syntax and code examples.
| 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
}
| 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
}
| 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: