Easysmart-pointersc++14

Что такое std::make_unique и почему его предпочитают new?

1Постановка

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

2Решение

std::make_unique<T>(args...) (C++14) создаёт unique_ptr<T> без явного new. Безопаснее для исключений, чем unique_ptr<T>(new T).

// ОПАСНО: если g() бросит после new T — утечка T
f(std::unique_ptr<T>(new T), g());

// БЕЗОПАСНО: ничего не успевает утечь
f(std::make_unique<T>(), g());

auto p = std::make_unique<Widget>(arg1, arg2);  // DRY: T пишется один раз

Преимущества: (1) безопасность исключений; (2) нет raw new в коде; (3) DRY — тип один раз. Минусы: нельзя задать кастомный deleter напрямую, нельзя использовать private конструкторы. Для shared_ptr аналогично make_shared.

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

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

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