IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

pointeur et destruction


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Par défaut pointeur et destruction
    Salut tout le monde,

    Voilà mon problème :

    J'ai une classe A qui a pour attribut un pointeur vers une instance d'une autre classe B. Dans le destructeur de la classe A, j'appelle une méthode de B, via le pointeur donc.
    Ensuite A (une instance de celle ci en fait) dont je parle ici est elle-même un attribut d'une troisième classe C.
    Une méthode de C contient un objet local de B, qui est passée en paramètre à A, afin d'affecter le pointeur attribut sur B.

    Et lorsqu'une exception est lancée dans cette méthode de C, l'objet local B est détruit (appel des destructeurs de tous les objets locaux), puis le destructeur de A est appelé (appel des destructeurs de tous les attributs).
    Mais comme ce destructeur de A appelle une méthode de B via un pointeur, et que l'instance de B vient d'être détruite, "Access Violation" évidemment.

    La question se résumerait donc en gros à "peut-on savoir si un objet pointé par un pointeur a été détruit ou non".

    Je sais pas si je m'exprime clairement, c'est pas évident à expliquer.

    D'avance merci,

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    peut-on savoir si un objet pointé par un pointeur a été détruit ou non
    Non.

  3. #3
    Membre chevronné Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Par défaut
    Tu peux utiliser les pointeurs de pointeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    34
    35
    36
    37
    38
    #include <iostream>
    using namespace std;
     
     
    class Toto
    {
    public:
    	Toto() {}
    	void show() { cout << "Class Toto" << endl; }
    };
     
    class Tata
    {
    	Toto **m_pToto;
    public:
    	Tata(Toto **pToto) : m_pToto(pToto) {}
    	void show() 
    	{ 
    		cout << "Class Tata" <<  endl; 
    		if ( *m_pToto )
    			(*m_pToto)->show();			
    		else
    			cout << "NULL pointer" << endl;
     
    	}
    };
     
    int main()
    {
    	Toto *pToto = new Toto();
    	Tata tata( &pToto );
    	tata.show();
     
    	delete pToto;
    	pToto = 0;
     
    	tata.show();
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 44
    Par défaut
    merci !

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Une référence sur le pointeur aurait suffit

  6. #6
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    Ca donnerait quoi une référence sur un pointeur??

    autre question sur ma classe "Point".

    je ne vois pas pq ce code fait planter VC2005:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    class Point{
    private:
      float r,t;
    public:
    	Point(float x ,float y);
        ~Point();
    	 void affiche();
    	 void deplace(float , float );
     
    };
     
     
    void main(){
    	float x,y;
    	Point *p;
    for(int i=0;i<2;i++) 	 
    	p=new Point(x,y);
     
     
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Destruction de pointeurs
    Par pacolito dans le forum Débuter
    Réponses: 5
    Dernier message: 20/01/2011, 20h43
  2. Réponses: 4
    Dernier message: 28/09/2009, 01h38
  3. Destruction d'un pointeur
    Par julieng31 dans le forum Débuter
    Réponses: 2
    Dernier message: 29/01/2009, 21h01
  4. Réponses: 3
    Dernier message: 25/11/2008, 15h52
  5. probleme de destruction de pointeur
    Par Dom_the_quaker dans le forum C++
    Réponses: 6
    Dernier message: 09/06/2008, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo