Hardlifetime

Что такое lifetime extension у temporary объектов?

1Постановка

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

2Решение

Временные объекты (prvalue) обычно умирают в конце full-expression. Но C++ продлевает их lifetime, если они привязаны к const-ссылке или rvalue-ссылке.

const std::string& r = std::string("temp");  // продлено: живёт пока жива r
std::string&& rr = std::string("temp");       // продлено тоже
std::cout << r;  // OK — объект ещё жив

НЕ продлевается:

  • lifetime temporaries, привязанных к параметрам функции (f(makeTemp()) — temporary умрёт после вызова);
  • temporaries, привязанные к member через initializer list — частая ловушка (const std::string& m = getTemp(); в списке инициализации, getTemp умрёт).

Это позволяет безопасно возвращать ссылки на временные в определённых паттернах.

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

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

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