begin process at 2010 02 10 07:02:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Instanciation dangereuse ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Instanciation dangereuse ?

vendredi 17 février 2006 à 14:27:17 | Instanciation dangereuse ?

tintin72

Bonjour,

Pour les besoins d'une application je suis confronté à un problème quelque peu tordu
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 :

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 :

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

samedi 18 février 2006 à 02:23:35 | Re : Instanciation dangereuse ?

magic_Nono

Membre Club
hello

plusieurs points:
préfère des membres privés,
met à null les pointeurs inutilisés,
fait des controles.


repris, ton code donnerai:

class CA
{
private:
    int m_iA;
public:
  CA(){m_iA=0;}
  CA(const int val){m_iA=val;}
  ~CA(){}
   int get()const {return m_iA;}
   void set(const int iA){m_iA=iA;}
};  


class CB

private:
     classeA *m_pCA;  //Pointeur membre sur classeA
  public:
     CB()m_p(NULL){}
    ~CB(){destroy();}
     create(){destroy();m_pCA=new CA();}
     create(const int val){destroy();m_pCA=new CA(val);}
     destroy(){if(m_pCA)delete(m_pCA);}
   int get()const {if(m_pCA)return m_pCA->get();else return 0;}
   void set(const int iA){if(m_pCA) m_pCA->set(iA);}
};


int main(int argc, char *argv[])
{
  CB *pCB = new CB;//Créé un objet classeB via un pointeur
  pCB->set( 0);//échec

  pCB->create();
  pCB->set(56);// On peut maintenant accéder aux membres 
                                                         // du nouvel objet de type classeA via un 
  ...                     
  pCB->destroy();
  delete( pCB);
 
  system("PAUSE"); 
  return 0;
}




enfin, ce n'est que ce que j'aurai fait;
à vous la team
___________________________________________________________
Magicalement
Nono
samedi 18 février 2006 à 02:33:05 | Re : Instanciation dangereuse ?

magic_Nono

Membre Club
classeA à remplacer par CA , ds la def de CB, oki

et le pCB->destroy();
est optionnel


Cette discussion est classée dans : objet, classeb, classea, pcb, pclassea


Répondre à ce message

Sujets en rapport avec ce message

Methodes virtuelles [ par neodelphi ] Bonjour à tous... Je suis en train d'essayer de faire certaines choses avec mes classes, et j'ai remarqué un drole de truc: Soit classeA une classe a Question con [ par coyote ] J'ai 2 classes: ClasseA et ClasseBClasseA possede une variable de type ClasseB, et ClasseB possede une variable de type ClasseA. Comment faire pour qu Construire un objet CByteArray à partir d'un tableau de Bytes [ par Taoufik77 ] Salut,Quelqu'un aurait uen idée pour créer un objet de type CByteArray à partir d'un tableau de bytes. J'ai pensé à la méthode SetAt(int nIndex, CObje affichage de JPEG à partir d'un répertoire [ par maigmoc ] j'essaie de faire ce projet en Visual C++ mais je suis noviste dans ce environnement de développement et si quelqu'un pouvait m'aider. 1 - selection d supprimer objet de type BITMAP [ par tdeco ] SalutJ'utilise un objet de type BITMAP que je cré à partir d'un buffer et que j'affiche par la suite.Il y a t-il un moyen de supprimer cet objet après test du pointeur [ par jeltimed ] bonjour .en fait je suis débutant en c++ et je voulais juste savoir est ce que ya moyen d'appliquer la logique suivant en c++: si pointeur pointe Label et autre objet dans C++ Builder [ par zulot ] Voila c'est tout simple je ne comrpends absoluement pas comment declarer des labels et autre avec borland6 c++ builderJe suis tout simplement en trian Utilisation des CArchive [ par Bb_TiTi ] bonjour,je commence a utiliser les CArchive et j'ai quelques questions:- comment passer d'une CArchive a un objet? quand j'ai réécris la fonction seri D3DXMATRIX : probleme déformation [ par supergrey ] Bonjour, je voudrais pouvoir appliqué a un objet différentes rotations et translations étant soumises a inertie.J'ai donc créé des matrices pour recev Traitement d'image : Detection de contour [ par Bambi07 ] je cherche à déterminer les contours d'un objet dans une image en niveaux de gris.Tous les pixels de l'objet sont quasiment au meme niveau de gris et


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,421 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales