Junior
149
questionbank

В чем разница между unique_ptr и shared_ptr?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

unique_ptr — эксклюзивное владение ресурсом, shared_ptr — совместное владение ресурсом с подсчетом ссылок.

unique_ptr:

  • Не может быть скопирован, только перемещен (std::move).
  • Низкие накладные расходы (аналогично сырому указателю).
  • При уничтожении unique_ptr ресурс освобождается.
cpp

shared_ptr:

  • Может быть скопирован.
  • Использует счетчик ссылок: ресурс удаляется, когда последний shared_ptr на него уничтожается.
  • Большие накладные расходы (хранит счетчик ссылок и указатель на ресурс).
  • Возможны циклические ссылки (решаются с помощью weak_ptr).
cpp

Сравнение:

Признакunique_ptrshared_ptr
ВладениеЭксклюзивноеСовместное
КопированиеНет (только перемещение)Да
Накладные расходыНизкиеВысокие
Циклические ссылкиНевозможныВозможны (решаются weak_ptr)
ПрименениеДля объектов с одним владельцемДля объектов с несколькими владельцами