ExpertiDict

C++ · Avançado · Português · Técnico

extensão de vida de temporário

estẽˈsɐ̃w dʒi ˈvidɐ dʒi tẽpoˈɾaɾjulocução nominal

Regra pela qual um temporário ligado a uma referência const& ou && local vive até o fim do escopo dessa referência, em vez de morrer no fim da expressão.

Onde usar

Torna seguro escrever const std::string& s = obter();. Em code review, o cuidado é com os casos em que a extensão não ocorre, como referência devolvida por uma função.

Em código

std::string obter() { return "Ana"; }
const std::string& r = obter();  // vive aqui
std::cout << r;                  // seguro
const std::string& id(const std::string& s) {
  return s;
}
const auto& q = id(obter());     // pendurada

Exemplos

Isso é seguro por causa da extensão de vida de temporário: o objeto vive enquanto a referência existir.

A extensão de vida de temporário não vale quando você devolve a referência de uma função.

Cuidado

A extensão não atravessa chamadas de função: const T& id(const T& x) { return x; } devolve referência a um temporário que já foi destruído.

Sinônimos

lifetime extension

Veja também

Todos os termos de C++