Sobes.tech
Middle

Da li shared_ptr ima samo jedan brojač referenci ili više?

sobes.tech АИ

Одговор од АИ

// shared_ptr koristi zajednički brojač referenci,
// koji se čuva u kontrolnoj blokadi.
// Ovaj kontrolni blok takođe sadrži informacije o delete-u korisnika (deleter)
// i korisničkom alokatoru, ako su oni obezbeđeni prilikom kreiranja shared_ptr.

// Svaka kopija shared_ptr koja pokazuje na isti objekat,
// referiše na ovaj jedini kontrolni blok i povećava/smanjuje
// zajednički brojač pri kopiranju/brisanju.

// Pored zajedničkog brojača referenci za shared_ptr,
// kontrolni blok takođe sadrži brojač slabih referenci (weak count)
// za slab pointera (weak_ptr) koji ukazuju na isti objekat.

// Dakle, za svaki objekat koji se upravlja putem shared_ptr,
// postoji samo jedan snažni brojač referenci (za shared_ptr) i jedan slab brojač referenci (za weak_ptr),
// smešteni u jednom kontrolnom bloku.