Compartilhar via


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.

Consulte também

Referência

Funções de membro especial (C++)