L'opérateur new initialise la mémoire à zéro
En C, l'opérateur new est couramment utilisé pour l'allocation dynamique de mémoire. Il alloue un bloc de mémoire de la taille spécifiée et renvoie un pointeur vers la mémoire allouée. Cependant, il existe une idée fausse répandue selon laquelle new n'initialise pas la mémoire allouée avec des zéros. Cet article clarifie comment new initialise la mémoire, en corrigeant les divergences apparentes.
Initialisation par défaut et zéro
Lors de l'utilisation de new pour créer un objet d'un type primitif (par exemple, int , unsigned int), il existe deux variantes :
La même chose s'applique aux tableaux :
Clarification de l'initialisation zéro
Bien que new initialise généralement les primitives avec des valeurs indéterminées, l'exception se produit lors de l'utilisation de l'initialisation zéro avec la syntaxe des parenthèses vides (new taper();). Cela initialise la mémoire avec des zéros. La norme C 11 prend en charge ce comportement :
[C++11: 5.3.4/15]: A new-expression that creates an object of type T initializes that object as follows: [...] If the new-initializer is interpreted according to the initialization rules of 8.5 for direct-initialization.
Placement New
Placement new permet d'allouer de la mémoire dans un emplacement spécifique. En utilisant cette technique avec une initialisation nulle, il devient évident que la mémoire est bien mise à zéro :
//... (memory allocation and initialization code) wsa[0] = 1; // Modify the memory location wsa[1] = 2; // Modify the memory location // ... (more modifications) //...
Si la mémoire contenait les valeurs d'origine (1, 2, ...), alors l'initialisation zéro aurait échoué. Cependant, la sortie confirme que la mémoire allouée a été définie sur zéro.
Par conséquent, bien que new n'initialise généralement pas la mémoire primitive avec des zéros, l'utilisation de l'initialisation zéro (new type();) initialise la mémoire à zéro. Cela est vrai à la fois pour l'allocation directe de mémoire et pour le placement de nouveaux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!