Назад к вопросам
Middle
116
questionbank

У shared_ptr есть только один счетчик ссылок или их несколько?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

// shared_ptr использует один общий счетчик ссылок (reference count),
// который хранится в управляющем блоке (control block).
// Этот управляющий блок также содержит информацию о пользовательском delete (deleter)
// и пользовательском аллокаторе (allocator), если они были предоставлены при создании shared_ptr.

// Каждая копия shared_ptr, указывающая на один и тот же объект,
// ссылается на этот единственный управляющий блок и инкрементирует/декрементирует
// общий счетчик при копировании/удалении.

// Помимо общего счетчика ссылок для shared_ptr,
// управляющий блок также содержит счетчик слабых ссылок (weak count)
// для слабых указателей (weak_ptr), указывающих на тот же объект.

// Таким образом, для каждого объекта, управляемого shared_ptr,
// существует только один общий счетчик сильных ссылок (для shared_ptr) и один счетчик слабых ссылок (для weak_ptr),
// хранящиеся в одном управляющем блоке.