'this' : utilisé dans la liste des initialiseurs membre de base

Résolu
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 2 sept. 2005 à 17:34
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 2 sept. 2005 à 18:23
J'obtiens ce warning pour l'exemple suivant. (c'est qu'un warning donc je m'en fous mais j'aimerais savoir quel est le problème quand même).
---------------------------------------------------
#include
using namespace std;

class A;

class B
{
public:
A* m_parent;

B(A* parent)
{
m_parent = parent;
}
};

class A
{
public:
B m_child;
int x;
A(): m_child(this)
{
x = 12;
}
};

int main()
{
A a;
cout << a.m_child.m_parent->x << endl;
}
---------------------------------------------------
L'exemple peut paraitre assez bizarre ou même moche, mais j'ai besoin de faire ca. L'affichage de x à la fin montre que le warning n'a pas de raison d'être puisque tout marche bien
Je voudrais savoir si c'est un coup de bol et si dans certains cas ca ne marcherait pas
Merci

2 réponses

steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
2 sept. 2005 à 18:18
Quand tu fais

A(): m_child(this)



le constructeur de B est appelé avec l'adresse d'un A dont les membres
ne sont pas construit, ca pourrait provoquer un comportement indéfinis
si tu ne prends pas ca en considération dans le constructeur de B. Dans
ton cas ca ne pose pas de probleme et le warning est juste la pour
t'avertir.
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 sept. 2005 à 18:23
OK, ca me semble tellement évident. Désolé pour le dérangement
0
Rejoignez-nous