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

Что такое aliasing constructor у shared_ptr?

1Постановка

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

2Решение

Aliasing constructor: shared_ptr<U>(owner, U* ptr) — создаёт shared_ptr<U>, делящий счётчик с owner, но указывающий на другой объект (часто член owner).

struct Widget { int value = 42; };

auto sp = std::make_shared<Widget>();

// memberPtr делит счётчик с sp, указывает на sp->value
std::shared_ptr<int> memberPtr(sp, &sp->value);

sp.reset();   // Widget НЕ удалён, пока memberPtr жив
*memberPtr;   // 42

Полезно для возврата shared_ptr на член: родитель жив, пока жив указатель на член.

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

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

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