Pergunta

Eu entendo construtor de cópia é chamado em três instâncias

  1. Ao instanciar um objeto e inicializa-la com valores a partir de outro objeto.
  2. Quando passar um objeto por valor.

3. Quando um objeto é retornado de uma função por valor.

Eu tenho pergunta com no.3 se construtor de cópia é chamado quando o valor do objeto é retornado, não deveria criar problemas se o objeto é declarado localmente na função.

i significa que o construtor de cópia é uma cópia profunda e leva referência de um objeto como parâmetro

Foi útil?

Solução

É chamado exatamente para evitar problemas. Um novo objeto servindo como resultado é inicializado a partir do objeto localmente-definida, então o objeto definido localmente é destruído.

Em caso de deep-construtor de cópia definido pelo usuário é tudo a mesma coisa. Em primeiro lugar o armazenamento é alocado para o objeto que servirá como resultado, em seguida, o construtor de cópia é chamado. Ele usa a referência passou para acessar o objeto definida localmente e copiar o que é necessário para o novo objeto.

Outras dicas

A cópia é feito antes que os chamados função sai, e copia a variável local então existente no valor de retorno.

A função chamada tem acesso à memória o valor de retorno irá ocupar, apesar de que a memória não é "no escopo" quando a cópia está sendo feito, ele ainda está disponível.

De acordo com a uma resposta à minha pergunta, o construtor de cópia pode ser chamado até duas vezes:. uma vez para copiar um objeto local para o retorno 'objeto', e uma vez para copiar o objeto de retorno para a variável foi atribuído a

No entanto, necessidade não ser! O compilador pode otimizar ambas construções cópia de distância.

Não, chama-o antes que os moradores estão destruídas. Você pode testar isso com um objeto que registros destruição e construção copiar, ou olhando para o código assembly gerado.

Há três casos gerais em que o construtor de cópia é chamado:

  1. Quando instanciar um objecto e inicializando-lo com valores a partir de um outro objecto (do mesmo tipo).
  2. Quando passar um objeto por valor.
  3. Quando um objeto é retornado de uma função por valor.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top