Outils pour utilisateurs

Outils du site


lang:cpp:constructeur

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
lang:cpp:constructeur [2019/07/10 15:48] – Précision sur l'intérêt de l'exemple rootlang:cpp:constructeur [2019/12/18 23:49] (Version actuelle) – Ajout de "Les exceptions dans un destructeur" root
Ligne 32: Ligne 32:
   i-858993460   i-858993460
   1   1
 +
 +====Ordre de l'initialisation des membres par la liste du constructeur====
 +
 +L'ordre d'initialisation des membres sera celui de la déclaration de la classe et non pas celui de la liste.
 +
 +<code cpp>
 +class A
 +{
 +public:
 +  int j;
 +  int* i;
 +  A(int* i_) :i(i_), j(*i) {}
 +};
 +
 +int main()
 +{
 +  int i = 0;
 +  A a(&i);
 +}
 +</code>
 +
 +En more ''Debug'' (sans optimisation), à l'exécution, on aura :
 +
 +<code>
 +Exception levée : violation d'accès en lecture.
 +this->**i** a été nullptr.
 +</code>
 +
 +====Faire échouer un constructeur/ Faire renvoyer nullptr à un constructeur====
 +Non, c'est impossible de faire échouer proprement un constructeur ou de renvoyer ''nullptr'' pour tester le code de retour.
 +
 +Le seul moyen de faire échouer un constructeur est de générer une exception.
 +
 +L'autre solution est de créer un constructeur vide (ou avec le minimum) puis d'appeler une fonction d'initialisation qui sera autorisée à échouer et enfin détruire la classe si besoin.
 +
 +====Les exceptions dans un destructeur====
 +C'est interdit. Par défaut, les constructeurs non ''noexcept''. Si une exception est générée, cela génère un ''abort()''.
 +
 +[[https://akrzemi1.wordpress.com/2011/09/21/destructors-that-throw/|Destructors that throwDestructors that throw]] {{ :lang:cpp:constructeur:destructors_that_throw_andrzej_s_c_blog_2019-12-18_23_39_00_.html |Archive du 21/09/2011 le 18/12/2019}}
lang/cpp/constructeur.1562766503.txt.gz · Dernière modification : 2019/07/10 15:48 de root