Mediumумные указатели
Почему нужно предпочитать std::make_shared/shared_ptr(new T)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
`make_shared` выделяет один блок памяти под control block и объект — одна аллокация вместо двух, лучше локальность кэша. Также безопасен от утечек при вычислении аргументов.
// ПЛОХО: если g() бросит, T утёк (shared_ptr ещё не создан)
f(std::shared_ptr<Widget>(new Widget()), g());
// ХОРОШО: make_shared атомарен относительно исключений
f(std::make_shared<Widget>(), g());Минус make_shared: объект не освобождается, пока жив хоть один weak_ptr (память в объединённом блоке). Для больших объектов с долгоживущими weak — лучше shared_ptr(new T).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.