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