Instanciation dangereuse ?
Bonjour,
Pour les besoins d'une application je suis confronté à un problème quelque peu tordu :wink:
J'ai 2 classes, classeA et classeB.
J'aimerais pouvoir créer (de façon dynamique) un objet de type classeA via un pointeur membre de classeB.
hum, bon ok :) voici un petit exemple:
dans main.h :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
class classeA
{
public:
int entierA;
void creerObjet(classeA **p);
void libererMem(classeA **p);
};
class classeB
{
public:
classeA *m_pClasseA; //Pointeur membre sur classeA
}; |
dans main.cpp :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
void classeA::creerObjet(classeA **p)
{
*p = new classeA; //alloue de la mémoire pour un nouvel objet
return;
}
void classeA::libererMem(classeA **p)
{
delete *p; //Libère la mémoire alloué
return;
}
int main(int argc, char *argv[])
{
classeB *pCB = new classeB;//Créé un objet classeB via un pointeur
pCB->m_pClasseA = 0;//initialise les membres
pCB->entierB = 0;
pCB->m_pClasseA->creerObjet(&(pCB->m_pClasseA));
pCB->m_pClasseA->entierA = 56;// On peut maintenant accéder aux
// membres du nouvel objet de type
// classeA via un pointeur sur un objet
//de type classeB
pCB->m_pClasseA->libererMem(&(pCB->m_pClasseA));
delete pCB;
system("PAUSE");
return 0;
} |
Apparement ce petit programme fonctionne mais, n'étant pas un guru du c++ j'aimerais
savoir si cet exemple est correcte et si je peux m'en servir dans un programme plus conséquent sans courir de risques ?
D'avance merci
Tintin 72
Re: Instanciation dangereuse ?
Citation:
Envoyé par tintin72
Code:
1 2 3 4
| pCB->m_pClasseA = 0;//initialise les membres
pCB->entierB = 0;
pCB->m_pClasseA->creerObjet(&(pCB->m_pClasseA)); |
Apparement ce petit programme fonctionne
1)
Code:
pCB->m_pClasseA = NULL; // c'est mieux
2)
Code:
1 2
| pCB->m_pClasseA = NULL;
pCB->m_pClasseA->creerObjet(&(pCB->m_pClasseA)); |
ton pointeur ne pointe sur rien, comment fais-tu pour accéder à une fonction de la classe A à partir d'un pointeur NULL ???