Question

Quelle est la différence entre " new " et & mall; malloc " et " calloc " et d'autres en famille?

(Quand) Ai-je besoin d'autre chose que "nouveau"? ?

L’un d’eux est-il implémenté par un autre?

Était-ce utile?

La solution

new et delete sont des fonctionnalités spécifiques à C ++. Ils n'existaient pas en C. malloc est la vieille méthode de C pour faire les choses. La plupart du temps, vous n'avez pas besoin de l'utiliser en C ++.

  • malloc alloue de la mémoire non initialisée. La mémoire allouée doit être libérée avec free .
  • calloc ressemble à malloc mais initialise la mémoire allouée avec une constante (0). Il doit être libéré avec free .
  • new initialise la mémoire allouée en appelant le constructeur (s'il s'agit d'un objet). La mémoire allouée avec new doit être libérée avec delete (qui à son tour appelle le destructeur). Vous n'avez pas besoin de spécifier manuellement la taille dont vous avez besoin et de le convertir au type approprié. Ainsi, il est plus moderne et moins sujet aux erreurs.

Autres conseils

nouveau / supprimer + nouveau [] / supprimer []:

  • new / delete est la méthode C ++ d'allocation de mémoire et de libération de mémoire du tas.
  • new [] and delete [] est le moyen c ++ d'allouer des tableaux de mémoire contiguë.
  • Doit être utilisé car il est plus sûr en caractères typés que malloc
  • Doit être utilisé car il appelle le constructeur / destructeur
  • Ne peut pas être utilisé de manière réelle, mais peut utiliser un nouvel emplacement pour réutiliser le même tampon de données
  • Les données ne peuvent pas être attribuées avec new et libérées avec free, ni supprimer []

malloc / free + family:

  • malloc / free / family est le moyen C d’allouer et de libérer de la mémoire du tas.
  • calloc est identique à malloc mais initialise également la mémoire
  • À utiliser si vous avez besoin de réaffecter la mémoire
  • Les données ne peuvent pas être attribuées avec malloc et libérées avec delete ni delete []

Voir aussi ma réponse associée ici

  • new alloue et appelle à ctor (la commande n'est pas spécifiée), supprime le dtor et libère la mémoire allouée par un appel à new
  • malloc n'alloue que de la mémoire, supprime gratuitement la mémoire allouée par malloc
  • new peut être implémenté avec malloc (non requis par la norme)
  • calloc fait la même chose que malloc et met également à zéro la mémoire récemment allouée

Comme d'autres posts l'ont souligné: malloc / free fait partie du C ++ pour être compatible avec C.

Voir aussi: Stroustrup: nouveau vs malloc

Utiliser new signifie que les constructeurs seront appelés sur la mémoire nouvellement allouée. Si la chose allouée n'a pas de constructeur, new est fonctionnellement identique à malloc. et devrait normalement être utilisé en référence à ce sujet.

new peut ou peut ne pas être implémenté en termes de malloc - la norme C ++ ne nécessite aucune approche.

Vous n'avez besoin de rien d'autre que du neuf. C’est un remplacement complet de malloc en C ++.

En ce qui concerne la différence: Malloc alloue juste de la mémoire. Nouvelle mémoire allouée et appelle les constructeurs. De même, free libère simplement la mémoire. Supprimer libère la mémoire et appelle le destructeur.

Un mot d’avertissement: ne mélangez pas les deux idiomes. Les résultats ne sont pas définis.

la principale différence entre new et malloc, je me souviens bien, est que vous ne pouvez pas réaffecter la mémoire allouée par new en utilisant realloc. Donc, si vous vouliez augmenter / diminuer la taille du bloc de mémoire, vous deviez allouer un nouveau bloc et tout copier.

Calloc vous permet d’initialiser le bloc de mémoire que vous allouez, contrairement à malloc.

Lorsque vous nouveau , un espace est non seulement alloué, mais le constructeur de l'objet est appelé. Mais c’est la méthode C ++ utilisée, malloc est l’ancienne version de C pour l’allocation de mémoire. calloc est identique à malloc , sauf qu'il efface la mémoire pour obtenir tous les bits nuls.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top