Sobes.tech
Middle

Дали shared_ptr има само един брояч на референции или няколко?

sobes.tech AI

Отговор от AI

// shared_ptr използва споделен брояч на референции,
// който се съхранява в контролния блок.
// Този контролен блок също съдържа информация за delete на потребителя (deleter)
// и за алокатора на потребителя, ако са предоставени при създаването на shared_ptr.

// Всяка копие на shared_ptr, сочещо към същия обект,
// се отнася към този единствен контролен блок и увеличава/намалява
// общия брояч при копиране/изтриване.

// Освен общия брояч на референции за shared_ptr,
// контролният блок съдържа също брояч на слаби референции (weak count)
// за слаби указатели (weak_ptr), сочещи към същия обект.

// Така, за всеки обект, управляван от shared_ptr,
// съществува само един силен брояч на референции (за shared_ptr) и един слаб брояч на референции (за weak_ptr),
// съхранявани в един контролен блок.