lang:cpp:constructeur
Ceci est une ancienne révision du document !
Initialisation d'un membre dans la déclaration vs dans le constructeur
C'est la même chose. La valeur dominante sera celle définie dans le constructeur.
int show(int i) { std::cout << "i" << i << std::endl; return 1; } class Something { public: int m_a = 0; Something() : // Ici, la valeur n'aura pas été préalablement initialisée à 0. m_a(show(m_a)) { } }; int main() { Something smh; std::cout << smh.m_a << std::endl; }
Valeur affichée :
i-858993460 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.
class A { public: int j; int* i; A(int* i_) :i(i_), j(*i) {} }; int main() { int i = 0; A a(&i); }
En more Debug
(sans optimisation), à l'exécution, on aura :
Exception levée : violation d'accès en lecture. this->**i** a été nullptr.
lang/cpp/constructeur.1575059810.txt.gz · Dernière modification : 2019/11/29 21:36 de root