Objetos temporários
Em alguns casos, é necessário para o compilador para criar objetos temporários.Esses objetos temporários podem ser criados pelos seguintes motivos:
Para inicializar um const referência a um inicializador de um tipo diferente do tipo subjacente da referência que está sendo inicializado.
Para armazenar o valor de retorno de uma função que retorna um tipo definido pelo usuário.Estes temporaries são criadas somente se o seu programa não copia o valor de retorno para um objeto.Por exemplo:
UDT Func1(); // Declare a function that returns a user-defined // type. ... Func1(); // Call Func1, but discard return value. // A temporary object is created to store the return // value.
Porque o valor de retorno não é copiado para outro objeto, é criado um objeto temporário.Um caso mais comum em que os temporaries são criados é durante a avaliação de uma expressão em que as funções de operador sobrecarregado devem ser chamadas.Essas funções de operador sobrecarregado retornam um tipo definido pelo usuário que normalmente não é copiado para outro objeto.
Considere a expressão ComplexResult = Complex1 + Complex2 + Complex3.A expressão Complex1 + Complex2 é avaliada, e o resultado é armazenado em um objeto temporário.Em seguida, a expressão temporária+ Complex3 é avaliada, e o resultado é copiado para ComplexResult (o supondo que o operador de atribuição não está sobrecarregado).
Para armazenar o resultado de uma projeção de um tipo definido pelo usuário.Quando um objeto de um determinado tipo explicitamente é convertido em um tipo definido pelo usuário, esse novo objeto é construído como um objeto temporário.
Objetos temporários têm uma vida útil que é definida por seu ponto de criação e o ponto em que são destruídos.Qualquer expressão que cria mais de um objeto temporário eventualmente destrói-las na ordem inversa em que foram criados.Os pontos em que ocorre a destruição são mostrados na tabela a seguir.
Pontos de destruição de objetos temporários
Temporário do razão criado |
Ponto de destruição |
---|---|
Resultado da avaliação de expressão |
Todos os temporaries criados como resultado da avaliação da expressão são destruídos no final da instrução de expressão (ou seja, a vírgula), ou no final das expressões para controlar for, if, while, do, e switch instruções. |
Inicializando const referências |
Se um inicializador não for um l-value do mesmo tipo como a referência que está sendo inicializado, um emprego temporário do tipo de objeto subjacente é criado e inicializado com a expressão de inicialização.Esse objeto temporário será destruído imediatamente após o objeto de referência ao qual está vinculado é destruído. |