Maison > développement back-end > C++ > Le « nouvel » opérateur en C initialise-t-il toujours la mémoire à zéro ?

Le « nouvel » opérateur en C initialise-t-il toujours la mémoire à zéro ?

Barbara Streisand
Libérer: 2024-12-10 22:27:26
original
238 Les gens l'ont consulté

Does the `new` Operator in C   Always Initialize Memory to Zero?

L'opérateur new initialise la mémoire à zéro

Malgré l'idée fausse générale selon laquelle l'opérateur new n'initialise pas la mémoire avec des zéros, il peut en effet accomplir cela tâche dans des conditions spécifiques.

En C , il existe deux scénarios principaux dans lesquels le nouvel opérateur effectue zéro initialisation :

  1. Parenthèses Initialisation :

    Lorsque new est suivi de parenthèses et d'une liste d'initialisation vide, telle que wsk = new unsigned int() ;, il invoque explicitement le constructeur par défaut du type. Pour les types primitifs comme unsigned int, le constructeur par défaut initialise la mémoire à zéro.

  2. Initialisation du tableau entre parenthèses :

    Similaire au scénario précédent, en utilisant des parenthèses et une liste d'initialiseurs vide dans la déclaration de tableau, comme wsa = new unsigned int[5]();, initialise chaque élément du tableau à zéro.

Dans l'exemple de code fourni, les lignes suivantes présentent une initialisation nulle :

wsk2 = new unsigned int(5);
Copier après la connexion

Cela initialise wsk2 à la valeur 5.

wsk2 = new unsigned int;
Copier après la connexion

Ceci initialise wsk2 à zéro car il utilise la syntaxe des parenthèses sans liste d'initialisation. Ce comportement s'applique à la fois aux scalaires et aux tableaux.

Dans la deuxième partie de l'exemple, la sortie confirme l'initialisation zéro :

wsk2: 0x928e008 5
wsk2: 0x928e008 0
Copier après la connexion

La première ligne montre que wsk2 pointe vers l'adresse 0x928e008 et contient la valeur 5. Après avoir supprimé wsk2 et en avoir créé un autre en utilisant new unsigned int;, la deuxième ligne montre qu'elle pointe maintenant vers le même adresse (0x928e008) mais contient zéro.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal