Si la mémoire que vous allouez est une classe avec un constructeur qui fait quelque chose d'utile, l'opérateur new appellera ce constructeur et laissera votre objet initialisé.
Mais si vous allouez un POD ou quelque chose qui n'a pas de constructeur qui initialise l'état de l'objet, vous ne pouvez pas allouer de mémoire et initialiser cette mémoire avec l'opérateur new en une seule opération. Cependant, vous avez plusieurs options:
1) Utilisez plutôt une variable de pile. Vous pouvez allouer et initialiser par défaut en une seule étape, comme ceci:
int vals[100] = {0}; // first element is a matter of style
2) utilisation memset()
. Notez que si l'objet que vous allouez n'est pas un POD , le paramétrer est une mauvaise idée. Un exemple spécifique est que si vous memset une classe qui a des fonctions virtuelles, vous allez faire sauter la vtable et laisser votre objet dans un état inutilisable.
3) De nombreux systèmes d'exploitation ont des appels qui font ce que vous voulez - allouer sur un tas et initialiser les données à quelque chose. Un exemple Windows seraitVirtualAlloc()
4) C'est généralement la meilleure option. Évitez du tout d'avoir à gérer la mémoire vous-même. Vous pouvez utiliser les conteneurs STL pour faire à peu près tout ce que vous feriez avec de la mémoire brute, y compris l'allocation et l'initialisation d'un seul coup:
std::vector<int> myInts(100, 0); // creates a vector of 100 ints, all set to zero