Pregunta

¿Cuál es la diferencia entre " nuevo " y " malloc " y " calloc " y otros en la familia?

(Cuándo) ¿Necesito algo que no sea " nuevo " ?

¿Uno de ellos está implementado usando otro?

¿Fue útil?

Solución

new y delete son características específicas de C ++. No existían en C. malloc es la forma en que C de la vieja escuela hace las cosas. La mayoría de las veces, no necesitará usarlo en C ++.

  • malloc asigna memoria no inicializada. La memoria asignada debe liberarse con libre .
  • calloc es como malloc pero inicializa la memoria asignada con una constante (0). Debe liberarse con libre .
  • new inicializa la memoria asignada llamando al constructor (si es un objeto). La memoria asignada con new debe liberarse con delete (que a su vez llama al destructor). No es necesario que especifique manualmente el tamaño que necesita y lo convierta al tipo adecuado. Por lo tanto, es más moderno y menos propenso a errores.

Otros consejos

nuevo / eliminar + nuevo [] / eliminar []:

  • new / delete es la forma en C ++ de asignar memoria y desasignar memoria del montón.
  • new [] y delete [] es la forma en c ++ de asignar matrices de memoria contigua.
  • Debería usarse porque es más seguro para el tipo que malloc
  • Debería usarse porque llama al constructor / destructor
  • No se puede usar de forma reallocada, pero se puede usar una ubicación nueva para reutilizar el mismo búfer de datos
  • Los datos no se pueden asignar nuevos y se pueden liberar de forma gratuita, ni eliminar []

malloc / free + family:

  • malloc / free / family es la forma en C de asignar y liberar memoria del montón.
  • calloc es lo mismo que malloc, pero también inicializa la memoria
  • Debería usarse si es posible que necesite reasignar la memoria
  • Los datos no se pueden asignar con malloc y se pueden liberar con eliminar o eliminar []

También vea mi respuesta relacionada aquí

  • new se asigna y llama a ctor (el orden no está especificado), elimina el dtor y libera la memoria asignada por una llamada a new
  • malloc solo asigna algo de memoria, la eliminación libre elimina la memoria asignada por malloc
  • nuevo puede implementarse usando malloc (no requerido por el estándar)
  • calloc hace lo mismo que malloc y también pone a cero la memoria recién asignada

Como han señalado otras publicaciones: malloc / free es parte de C ++ para ser compatible con C.

También vea: Stroustrup: new vs malloc

Usando new significa que se llamará a los constructores en la memoria recién asignada. Si la cosa que se asigna no tiene constructores, lo nuevo es funcionalmente idéntico a malloc. y normalmente se debe utilizar en referencia a él.

nuevo puede o no implementarse en términos de malloc: el estándar C ++ no requiere ningún enfoque.

No necesitas nada más que nuevo. Es un reemplazo completo para malloc en C ++.

En cuanto a la diferencia: Malloc simplemente asigna memoria. Nueva memoria asignada y llamada a los constructores. Igualmente gratis solo libera la memoria. Eliminar libera la memoria y llama al destructor.

Una palabra de advertencia: no mezcle los dos modismos. Los resultados no están definidos.

la principal diferencia entre new y malloc que puedo recordar es que no se puede reasignar la memoria asignada por new con realloc. Entonces, si quería aumentar / disminuir el tamaño del bloque de memoria, tenía que asignar un nuevo bloque y copiar todo.

Calloc le permite inicializar el bloque de memoria que asigna, mientras que malloc no lo hace.

Cuando usted nuevo un objeto, el espacio para el objeto no solo se asigna sino que se llama al constructor del objeto. Pero esta es la forma C ++ en que se hace, malloc es la versión anterior en C de asignar memoria. calloc es lo mismo que malloc , excepto que borra la memoria a todos los bits cero.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top