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++

  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);
     
     
    }

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ca donnerait quoi une référence sur un pointeur??
    Toto*&

    je ne vois pas pq ce code fait planter VC2005:
    (je suppose que tu voulais dire "planter mon programme" et pas "planter VC2005")
    Moi non plus. Au mieux des fuites de mémoire et des valeurs non initialisées, mais pas de plantage si le code se limite à ce que tu nous montres. Heureusement pour toi on a sorti un très bon tutoriel concernant le débogage sous Visual Studio
    http://loulou.developpez.com/tutorie...-visual-studio

  8. #8
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    (je suppose que tu voulais dire "planter mon programme" et pas "planter VC2005")
    >>oui.
    Heureusement pour toi on a sorti un très bon tutoriel concernant le débogage sous Visual Studio
    Très bien, parce que je cherchais des tuto pour VC 2005.

+ 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