π§ C++ Smart Pointers β Modern Memory Management Made Easy
π§² Introduction β What Are Smart Pointers in C++?
Smart pointers in C++ are template-based classes that automatically manage dynamically allocated memory. Introduced in C++11, smart pointers eliminate the need to explicitly use delete, thereby reducing the risk of memory leaks, dangling pointers, and undefined behavior.
π― In this section, youβll understand:
- Types of smart pointers: unique_ptr,shared_ptr,weak_ptr
- Ownership models and when to use each
- Common pitfalls and safe usage practices
π Why Use Smart Pointers?
Traditional memory management using new and delete is manual and error-prone. Smart pointers:
- Automatically free memory when no longer needed
- Prevent double deletion and dangling pointers
- Simplify exception-safe code
π‘ Types of Smart Pointers
| Smart Pointer | Description | Use Case | 
|---|---|---|
| std::unique_ptr | Owns an object exclusively (no copies allowed) | Resource with a single owner | 
| std::shared_ptr | Shared ownership via reference counting | Multiple owners needing shared access | 
| std::weak_ptr | Observes shared_ptrwithout affecting ref count | Break cyclic dependencies in shared_ptr | 
π» Code Examples
β
 std::unique_ptr Example
#include <iostream>
#include <memory>
using namespace std;
int main() {
    unique_ptr<int> ptr = make_unique<int>(10);
    cout << *ptr << endl;  // Output: 10
    return 0;
}
β
 std::shared_ptr Example
shared_ptr<int> p1 = make_shared<int>(100);
shared_ptr<int> p2 = p1;  // Reference count increases
cout << *p2 << endl;
β
 std::weak_ptr Example
shared_ptr<int> sp = make_shared<int>(42);
weak_ptr<int> wp = sp;  // No ownership
if (auto temp = wp.lock()) {
    cout << *temp << endl;
}
π§± Ownership and Lifetime
- unique_ptrcannot be copied, only moved (- std::move)
- shared_ptrmaintains a reference count; object is destroyed when count is 0
- weak_ptris used to observe- shared_ptrwithout increasing its reference count
π Best Practices
π Use make_unique<T>() and make_shared<T>() to construct smart pointers
π¦ Donβt mix raw pointers with smart pointers
π Use weak_ptr in graph/linked data structures to avoid cyclic references
π‘ Always prefer unique_ptr unless you need sharing
β οΈ Common Mistakes to Avoid
- Forgetting to use delete[]for arrays (not needed with smart pointers)
- Using raw new/deletealongside smart pointers
- Using shared_ptrwhenunique_ptrsuffices (performance penalty)
π Summary
- Smart pointers manage memory automatically and safely
- Use unique_ptrfor single ownership,shared_ptrfor shared, andweak_ptrto avoid cycles
- Replaces raw new/deletefor modern C++ memory management
βFAQ
β Why use smart pointers instead of raw pointers?
They automatically deallocate memory, preventing leaks and errors.
β Can I copy a unique_ptr?
No. You must use std::move() to transfer ownership.
β What is the overhead of shared_ptr?
Slightly more than unique_ptr due to reference counting.
β Do smart pointers work with arrays?
Yes, unique_ptr<T[]> can be used for arrays.
Share Now :
