No hay ninguna razón inherente por la que uno sea mejor en rendimiento que el otro. Diferentes compiladores y versiones de ellos pueden diferir, por lo que si realmente te importa, perfila y compara y usa los hechos como base para decidir.
Una asignación directa es más clara de leer.
La asignación es un poco más arriesgada al equivocarse, por lo que se asignan punteros a las estructuras en lugar de las estructuras apuntadas. Si teme esto, se asegurará de que las pruebas de su unidad lo cubran. No me importaría este riesgo. (Del mismo modo, memcpy
es arriesgada, ya que podría obtener el tamaño estructura equivocada.)
Solo tenga cuidado con la asignación de memoria dentro de la estructura. Por ejemplo, si tiene una estructura que contiene un puntero a una cadena y asigna memoria para la cadena. Ese recuerdo no se copia. el puntero a la memoria se copia, pero no la memoria en sí misma. En otras palabras, este tipo de asignación no es una copia profunda. Tampoco es memcpy vainilla para esa materia. Puede ser confuso en cuanto a quién posee la memoria asignada. – Pemdas
Creo que esta pregunta es más adecuada para Stackoverflow. – karlphillip
Creo que esta pregunta ya fue bien respondida aquí: http://stackoverflow.com/q/4931123/176769 – karlphillip