shared_ptr состоит из двух основных компонентов:
Указатель на управляемый ресурс: Сырой указатель на объект, которым shared_ptr управляет.
Указатель на управляющий блок (Control Block): Объект, содержащий метаинформацию об управляемом ресурсе. Этот блок динамически выделяется при создании первого shared_ptr или weak_ptr, указывающего на ресурс.
Управляющий блок typically содержит:
shared_ptr экземпляров, указывающих на ресурс. Когда этот счетчик достигает нуля, ресурс удаляется.weak_ptr экземпляров, указывающих на ресурс. Ресурс удаляется только когда счетчик сильных ссылок становится нулем, независимо от значения этого счетчика. Однако, управляющий блок удаляется только когда оба счетчика становятся нулем.delete.Пример создания shared_ptr и его компонентов на уровне концепции:
cpp
Визуальное представление:
shared_ptr |-> [ Свои данные (Указатель на ресурс, Указатель на управляющий блок) ]