[C con Clase] Destrucción automática de objetos temporales

Yan gdotta en telefonica.net
Dom Dic 7 19:45:09 CET 2008


Hola Salvador:

Sí, yo también he comprobado que el compilador (g++, en mi caso) hace cosas distintas y no siempre usa la asignación y el constructor copia sobrecargados. Imagino que, ejecutar un return desde un método que devuelve claseX, en muchos casos copia los datos miembros del objeto y eventual tabla virtual y lo mete en el pila de vuelta al código que ha llamado al método, en lugar de usar asignación o constructor copia.

Lo que sí no acabo de tener claro es con que criterio decidir si un método u operador sobrecargado ha de devolver claseX o claseX&. Porque he visto que en ambos casos puedo hacer cosas similares con lo que he devuelto:

(a+b).visualizar()

por ejemplo. ¿Tenéis alguna sugerencia al respecto?

El pasado 2008-12-07 17:30:23, Salvador Pozo escribió:
 
SP> En cuanto a tu problema, creo que Steven tiene razón. Ayer tampoco
SP> analicé a fondo el tema, y pensaba que al retornar un objeto temporal
SP> el compilador usaría el constructor copia para crear un nuevo objeto,
SP> y que la idea era ahorrarnos ese nuevo objeto.
SP> He hecho algunas pruebas, y he verificado que esto no es así (al menos
SP> no con el compilador que uso ahora).
SP> Sin embargo, debes tener cuidado, sobre todo si tus objetos usan
SP> memoria dinámica para algunos datos miembro. Deberías sobrecargar el
SP> operador copia y el de asignación.
SP> Haciendo pruebas he comprobado que ante situaciones aparentemente
SP> similares, el compilador hace cosas diferentes


Más información sobre la lista de distribución Cconclase