Cita:
Iniciado por r0d 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.