99 votes

Operator new initialise la mémoire à zéro

Il existe un tel code :

 #include <iostream>

int main(){
  unsigned int* wsk2 = new unsigned int(5);
  std::cout << "wsk2: " << wsk2 << " " << *wsk2 << std::endl;
  delete wsk2;
  wsk2 = new unsigned int;
  std::cout << "wsk2: " << wsk2 << " " << *wsk2 << std::endl;
  return 0;
}

Résultat:

 wsk2: 0x928e008 5
wsk2: 0x928e008 0

J'ai lu que new n'initialise pas la mémoire avec des zéros. Mais ici, il semble que oui. Comment ça marche?

3voto

Ernest Friedman-Hill Points 56605

Ce n'est pas operator new , c'est l'opérateur new Il y a effectivement une grosse différence ! La différence est que operator new est une fonction qui renvoie de la mémoire brute ; lorsque vous utilisez l' new , il invoque un constructeur pour vous. C'est le constructeur qui définit la valeur de ce int , pas operator new .

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