5.2.12 · HinglishC++ Programming

Smart pointers — unique_ptr (sole ownership), shared_ptr (shared ownership, ref count), weak_ptr (break cycles)

2,093 words10 min readRead in English

5.2.12 · Coding › C++ Programming


1. Problem jise hum solve kar rahe hain


2. unique_ptr — akela ownership


3. shared_ptr — reference count ke zariye shared ownership


4. weak_ptr — reference cycles tod do

Figure — Smart pointers — unique_ptr (sole ownership), shared_ptr (shared ownership, ref count), weak_ptr (break cycles)

5. Sahi wala choose karna (80/20)



Recall Feynman: ek 12-saal ke bachche ko explain karo

Socho ek library book. unique_ptr ek aisi book hai jo sirf tum rakh sakte ho — jab tum jaate ho, book automatically return ho jaati hai. Tum ise kisi dost ko de sakte ho (move), lekin phir tumhare paas nahi rahti. shared_ptr ek popular book hai jis par ek chhoti tally sheet hai: jo bhi borrow karta hai ek tick lagaata hai, jo bhi return karta hai ek tick hatata hai. Jab ticks zero ho jaati hain, book shelf par wapas jaati hai (deleted). weak_ptr woh insaan hai jisne sirf kahan hai book likh liya, lekin actually borrow nahi kiya — woh koi tick nahi lagate. Padhne se pehle unhe check karna hota hai "kya book abhi bhi yahan hai?" (lock()). Weak wala insaan do doston ko accident mein ek book forever rokne se bachata hai sirf ek doosre ko point karke (cycle).


Flashcards

unique_ptr ownership ke baare mein kya guarantee deta hai?
Exactly ek owner; yeh non-copyable hai, sirf movable hai (ownership transfer hoti hai, kabhi duplicate nahi).
unique_ptr non-copyable kyun hai?
Do copies dono ek hi object ko delete karengi → double-free; copy ctor =deleted hai, isliye std::move use karna padta hai.
make_unique / make_shared tumhe new ke comparison mein kya dete hain?
Koi raw new nahi, exception safety; make_shared object + control block ke liye single allocation bhi karta hai.
shared_ptr kya store karta hai?
Object ka pointer plus control block ka pointer jo strong count, weak count, aur deleter rakhta hai.
shared_ptr-managed object kab delete hota hai?
Jab strong (owner) count 0 tak pahunche; control block tab free hota hai jab strong0 AND weak0.
shared_ptr copy karne par use_count() ka kya hota hai?
1 badhta hai; jab copy destroy ya reset hoti hai to 1 ghatta hai.
weak_ptr kya problem solve karta hai?
Reference cycles — do shared_ptrs jo ek doosre ko point karte hain kabhi count 0 tak nahi pahunchate aur leak karte hain; weak_ptr strong count badhaye bagair observe karta hai.
weak_ptr ke peeche object ko safely kaise access karte hain?
lock() call karo; yeh ek shared_ptr return karta hai agar alive ho, ya empty agar expired ho.
Kya weak_ptr strong reference count badhata hai?
Nahi — yeh sirf weak count ko affect karta hai, isliye yeh object ko kabhi alive nahi rakhta.
Default smart pointer kaunsa use karna chahiye?
unique_ptr — sabse sasta aur sabse clear; shared_ptr par tab upgrade karo jab ownership genuinely shared ho.
Ek hi raw pointer se do shared_ptrs construct karna bug kyun hai?
Woh alag control blocks create karte hain → dono sochte hain ki sole owner hain → double-free.

Connections

  • RAII — woh principle jo smart pointers implement karte hain (lifetime = scope).
  • Move-semantics — isliye unique_ptr std::move se transfer hota hai.
  • Rule-of-Zero — smart pointers use karne se tum rarely destructors likhte ho.
  • Memory-leaks-and-dangling-pointers — woh bugs jo yeh prevent karte hain.
  • Reference-countingshared_ptr ke andar ka algorithm.
  • Garbage-collection — contrast: deterministic destruction vs GC.

Concept Map

forgets delete

destructor calls delete

solved by

sole owner

shared owners

non-owning

non-copyable so use

created by

tracks

reaches zero

observes

breaks

Raw pointer T*

Memory leaks and bugs

RAII lifetime = scope

Smart pointers

unique_ptr

shared_ptr

weak_ptr

std::move transfers ownership

make_unique

reference count

object deleted

reference cycles