294 votes

Quelle est la différence entre new / delete et malloc / free?

Quelle est la différence entre new / delete et malloc / free ?

Relatif (duplicata?): Dans quels cas dois-je utiliser malloc vs new?

488voto

Loki Astari Points 116129

new/delete

  • Allouer/libération de la mémoire
    1. La mémoire allouée à partir de 'Free'
    2. Revient entièrement tapé pointeur.
    3. nouvelle (version standard) jamais renvoie une valeur NULL (va jeter sur l'échec)
    4. Sont appelés de Type ID (compilateur calcule la taille)
    5. A une version explicitement à manipuler des tableaux.
    6. La réaffectation (pour obtenir plus d'espace) ne sont pas manipulés de manière intuitive (en raison de constructeur de copie).
    7. S'ils appel de malloc/free est définie par l'implémentation.
    8. Pouvez ajouter un nouvel allocateur de mémoire pour traiter avec peu de mémoire (set_new_handler)
    9. opérateur de new/delete peut être remplacée légalement
    10. constructeur/destructeur utilisé pour initialiser/destruction de l'objet

malloc/free

  • Alloue/libération de la mémoire
    1. La mémoire allouée à partir de 'Tas'
    2. Renvoie un void*
    3. Retourne NULL en cas d'échec
    4. Devez spécifier la taille en octets.
    5. L'allocation de tableau nécessite le calcul manuel de l'espace.
    6. La réaffectation plus grande partie de la mémoire simple (Pas de constructeur de copie à s'inquiéter)
    7. Ils vont PAS appel de new/delete
    8. Aucun moyen de le sectionner le code de l'utilisateur dans la séquence d'affectation de l'aide avec peu de mémoire.
    9. malloc/free peut PAS être substituée légalement

Techniquement, la mémoire allouée par la nouvelle vient de la 'Boutique', tandis que la mémoire allouée par malloc vient de le 'Tas'. Si ces deux domaines sont les mêmes est un détails de mise en œuvre, ce qui est une autre raison qui malloc et les nouveaux ne peuvent pas être mélangés.

84voto

Trap Points 4042

La différence plus pertinente, c’est que le opérateur alloue de la mémoire, puis appelle le constructeur, et appelle le destructeur, puis libère la mémoire.

31voto

James Curran Points 55356

appelle le ctor de l’objet, appeler le destructeur.

& seulement allouer et libérer la mémoire brute.

16voto

Treb Points 11153

/ est en C++, / vient du bon vieux ch.

En C++, appelle un constructeur d’objets et appelle le destructeur.

et , en venant de l’âge des ténèbres avant OO, seulement allouer et libérer la mémoire, sans exécuter tout code de l’objet.

13voto

Encryptic Points 107

En C++ / appeler le constructeur/destructeur en conséquence.

/ simplement allouer de la mémoire du tas de. / allouer de la mémoire aussi bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X