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 подскажет развёрнутый ответ в реальном времени.