Pregunta

Entiendo constructor de copia se llama en tres instancias

  1. Al crear instancias de un objeto e inicializar con valores de otro objeto.
  2. Cuando se pasa un objeto por valor.

3.Cuando un objeto es devuelto de una función por valor.

Tengo duda con ninguna.3 si constructor de copia es llamado cuando un objeto se devuelve el valor, no debería crear problemas si el objeto es declarado localmente en la función.

me refiero a que el constructor de copia es una copia profunda de uno y toma una referencia de un objeto como parámetro

¿Fue útil?

Solución

Se llama exactamente para evitar problemas. Un nuevo objeto de servir como resultado se inicializa desde el objeto definido localmente, entonces el objeto definido localmente se destruye.

En caso de profundo-constructor de copia definida por el usuario que es todo lo mismo. En primer lugar se asigna almacenamiento para el objeto que servirá como resultado, entonces el constructor de copia se llama. Utiliza la referencia de pasada a acceder al objeto definido localmente y copiar lo que sea necesario para el nuevo objeto.

Otros consejos

La copia se realiza antes de las llamadas sale de la función, y copia la variable local entonces existente en el valor de retorno.

La función llamada tiene acceso a la memoria el valor de retorno ocupará, a pesar de que la memoria no es "de alcance" cuando se hizo la copia, que todavía está disponible.

De acuerdo a una respuesta a mi pregunta, el constructor de copia puede ser llamado incluso en dos ocasiones:una vez que una copia de un objeto local en el regreso de 'objeto', y de una vez para copiar el objeto de devolución en la variable fue asignada.

Sin embargo, no es necesario ser!El compilador puede optimizar copia construcciones de distancia.

No, lo llama antes de que los locales se destruyen. Esto se comprueba con un objeto que registra la destrucción y construcción copia, o mirando el código ensamblador generado.

Hay tres casos generales en las que se llama el constructor de copia:

  1. Cuando instanciar un objeto y lo inicializa con valores de otro objeto (de mismo tipo).
  2. Al pasar un objeto por valor.
  3. Cuando un objeto es devuelto desde una función por valor.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top