Quelle est la différence entre "nouveau" et "malloc" et "calloc" et les autres membres de la famille?
(Quand) Ai-je besoin d'autre chose que de "nouveau"?
L'un d'eux est-il implémenté en utilisant un autre?
new
et delete
sont des fonctionnalités spécifiques à C++. Ils n'existaient pas en C. malloc
est la manière C traditionnelle de faire les choses. La plupart du temps, vous n'aurez 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
est comme 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). Il n'est pas nécessaire que vous spécifiez manuellement la taille dont vous avez besoin et que vous la convertissiez en type approprié. Ainsi, il est plus moderne et moins sujet aux erreurs.nouveau/supprimer + nouveau []/supprimer []:
malloc/free + family:
Voir aussi mon réponse connexe ici
Comme d'autres articles l'ont souligné: malloc/free fait partie de C++ pour être compatible avec C.
Voir aussi: Stroustrup: new vs malloc
L'utilisation de nouveaux moyens signifie que les constructeurs seront appelés sur la mémoire nouvellement allouée. Si la chose allouée n'a pas de constructeurs, new est fonctionnellement identique à malloc. et devrait normalement être utilisé par rapport à lui.
nouveau peut ou non être implémenté en termes de malloc - la norme C++ ne nécessite aucune des deux approches.
Vous n'avez besoin de rien d'autre que du neuf. Il s'agit d'un remplacement complet de malloc en C++.
Quant à la différence: Malloc alloue simplement de la mémoire. Nouvelle mémoire allouée et appelle les constructeurs. De même, free libère juste 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 dont je me souvienne est que vous ne pouvez pas réallouer la mémoire allouée par new en utilisant realloc. Donc, si vous vouliez augmenter/diminuer la taille du bloc mémoire, vous deviez allouer un nouveau bloc et tout recopier.
Calloc vous permet d'initialiser le bloc de mémoire que vous allouez, contrairement à malloc.
Lorsque vous nouvea un objet, l'espace pour l'objet n'est pas seulement alloué mais le constructeur de l'objet est appelé. Mais c'est la façon dont C++ est fait, malloc est l'ancienne version ( [~ # ~] c [~ # ~] d'allocation de mémoire. calloc est le même que malloc, sauf qu'il efface la mémoire de tous les bits zéro.