'this' : utilisé dans la liste des initialiseurs membre de base [Résolu]

vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 2 sept. 2005 à 17:34 - Dernière réponse : vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention
- 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
Afficher la suite 

2 réponses

Répondre au sujet
steve_clamage 475 Messages postés dimanche 3 octobre 2004Date d'inscription 11 août 2006 Dernière intervention - 2 sept. 2005 à 18:18
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de steve_clamage
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 2 sept. 2005 à 18:23
0
Utile
OK, ca me semble tellement évident. Désolé pour le dérangement
Commenter la réponse de vecchio56

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.