Ver Mensaje Individual
  #5 (permalink)  
Antiguo 28/09/2009, 08:44
Avatar de Eternal Idol
Eternal Idol
 
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Respuesta: Que hacen los dos puntos aqui

Cita:
Iniciado por r0d Ver Mensaje
Lo que pasa es que los compiladores modernos optimizan esto (reemplazan el operador de asignación por el constructor). Pero cuando la variable miembra es un objeto un poco complicado, no puede. Asi que, si fijaos el codigo siguiente por ejemplo:
No estoy del todo de acuerdo, me parece que el caso que expones es la excepcion a la regla y la optimizacion se produce en la inicializacion con respecto al constructor (en B se llama al constructor copia, en C al constructor por defecto y despues al operarador =). La variable local se usa en este caso que mostras por necesitar hacer una copia del objeto pero en condiciones normales de una asignacion simple no se necesita usar ninguna variable local en lo absoluto, por ejemplo si usara punteros a Human en B y C los constructores serian iguales.

PD. Tambien hay bastante codigo de mas en C por el hecho de que un constructor puede lanzar una excepcion, al optimizar llamando solo al operador de asignacion se omite el manejo de excepciones del constructor de B. El constructor de Human no esta inline, sino verias la asignacion de 0x1EC, directamente no es llamado por B.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO

Última edición por Eternal Idol; 28/09/2009 a las 09:22