'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 

Votre réponse

2 réponses

Meilleure réponse
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
Merci
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.

Merci steve_clamage 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

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
Merci
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.