Quelle est la valeur par défaut pour les membres de la classe C ++?

Quelles sont les valeurs par défaut pour les membres d’une structure et les membres d’une classe dans c ++, et en quoi ces règles diffèrent-elles (par exemple, entre classes / structs / primitives / etc)? Y a-t-il des circonstances où les règles concernant les valeurs par défaut diffèrent?

Il n’y a pas de différences entre les structures et les classes à cet égard en C ++. Ils sont tous appelés simplement des types de classe .

Les membres des types de classe n’ont aucune valeur par défaut dans le cas général. Pour qu’un membre de la classe obtienne une valeur déterministe, il doit être initialisé , ce qui peut être fait par

  • Constructeur par défaut du membre lui-même
  • Liste d’initialisation du constructeur de la classe englobante
  • Initialiseur spécifié explicitement pour l’object de la classe englobante (qui inclut l’initialisation de valeur et l’initialisation avec l’initialiseur d’agrégat).

En outre, tous les objects avec une durée de stockage statique sont initialisés à zéro au démarrage du programme.

Mis à part les cas ci-dessus, les membres de la classe, encore une fois, n’ont aucune valeur par défaut et contiendront initialement des valeurs de mémoire imprévisibles.

Oui, il y en a un. Si vous initialisez un object avec le constructeur par défaut et utilisez des parenthèses, les membres POD seront initialisés à zéro:

someClass * p = new someClass();