Quelles sont les différences entre MALLOC et NOUVEAU en termes de mécanismes respectifs d'allocation de la mémoire de traitement? p>
4 Réponses :
malloc code> ne jette pas Bad_alloc code> exception sous forme Nouveau code>.
- Parce que MALLOC ne jette pas d'exceptions, vous devez vérifier son résultat contre
null code> (ou nullptr en C ++ 11 et supérieur), ce qui n'est pas nécessaire avec neuf code>. Toutefois, Nouveau code> peut être utilisé de manière à ne pas jeter les attentes, comme lorsque la fonction set_new_handler code> est définie li>
ul> li>
-
malloc code> et libres code> ne appelle pas les constructeurs d'objets et les destructeurs, car il n'y a pas d'objets dans C code>. li>.
- Voir Cette question et Cet article . li>
ul>
En outre, parce que MALLOC ne jette pas d'exceptions, vous devez vérifier son résultat contre NULL, ce qui n'est pas nécessaire avec de nouveau.
Deux autres points peuvent être ajoutés: (1) Emplacement Nouveau code> (2) Compatibilité du
MALLOC / REALLOC CODE>.
@iammilind ok ajoutez-les en édité la réponse
Eh bien, implémentations de malloc () code> est une primitive de niveau plus basse. Cela vous donne simplement un pointeur pour n em> octets de mémoire de tas. L'opérateur C ++
nouveau code> est plus "intelligent" en ce sens qu'il "sait" sur le type de l'objet (s) alloué (s) et peut faire des choses comme des constructeurs d'appel pour s'assurer que les objets nouvellement alloués sont tous correctement initialisé. P>
nouveau code> finissent souvent par appeler
malloc () code> pour obtenir la mémoire brute, puis faire des choses sur cette mémoire pour initaliser les OBJECS construits . p>
Si l'appel échoue, pour Ces différences sont concernant l'attribution, il y a des tonnes d'autres - Nouveau Constructeur d'appelera, nouveau peut être surchargé, nouveau est un opérateur, tandis que MALLOC est une fonction ... P> Nouveau code> lancera une exception tandis que
malloc code> retournera
null code>. p>.
MALLOC code>, l'appelant doit spécifier la quantité de mémoire à attribuer, tandis que
nouveau code> le détermine automatiquement. P>
Voulez-vous dire comment ils sont mis en œuvre? p>
Ils peuvent être mis en œuvre comme n'importe quoi, juste ou voulez-vous dire comment ils diffèrent sur le niveau de langue? p>
MALLOC code> ne peut pas appeler
Nouveau code> et toutes les normes
Nouveau code> S doivent appeler le global
opérateur nouveau (vide *) code>. Souvent
nouveau code> est même implémenté comme appelant
malloc code> mais il n'y a aucune exigence sur la manière dont cela est mis en œuvre. Il y a même des dizaines d'allocateurs là-bas, chacun avec quelques forces et certaines week-ends. P>
Nouveau code> lancers (sauf s'il est appelé avec
std :: nodhow code>) sur l'erreur d'allocation. Nouvelles expressions (pas l'opérateur nouveau) appelle le CTOR. LI>
malloc code> retourne
0 code> sur les pannes d'allocation. li>
ul>
MALLOC code> ne jette pas
Bad_alloc code> EXEPEION comme
Nouveau code>, comme je pense
MALLOC CODE> et
GRATUIT CODE> N'appelez pas les constructeurs d'objets et les destructeurs.
Ci-dessus des commentaires ajoutés à une réponse communautaire-wiki.
Parasht.com/c++-faq-lite/freestore- mgmt.html # FAQ-16.4
S'il vous plaît voir Stackoverflow.com/Questtions/7443782/...