Mediumумные указатели

Чем std::unique_ptr отличается от std::shared_ptr?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

`unique_ptr` — эксклюзивное владение: нельзя копировать, только move. Практически без накладных расходов (sizeof == sizeof(T*)). `shared_ptr` — разделяемое владение через atomic-счётчик ссылок.

auto u = std::make_unique<Widget>();
// auto u2 = u;              // ОШИБКА: нельзя копировать
auto u3 = std::move(u);        // OK: владение передано, u == nullptr

auto s1 = std::make_shared<Widget>();
auto s2 = s1;                  // OK: счётчик ссылок = 2

По умолчанию — unique_ptr; shared_ptr — только когда владение действительно разделяется между сущностями с неизвестным временем жизни.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.