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 :

utilisation de pointeur Intelligent


Sujet :

C++

  1. #21
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Citation Envoyé par Flob90 Voir le message
    @Daïmanu: C'est Impl qui est incomplet ? Parce que si c'est le cas, peu importe ce que dit gcc, ton code est et reste mauvais peu importe ce que tu fais aux destructeurs (celui de Impl ou de la classe englobante ?).
    En gros voila le code coupable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //déclarations (.h)
    class C {
        public:
            ~C(); //visiblement requis
        private:
            struct Impl;
            std::unique_ptr<Impl> pimpl;
    };
    //définitions (.cpp)
    C::~C() {} //visiblement requis
    class C::Impl {
    }

  2. #22
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    @Daïmanu: En effet c'est bon comme ça (j'avais pas compris ce dont tu parlais sans le code ), si tu ne fais rien le destructeur est inline et tu te retrouves donc à détruire ton unique_ptr à un endroit où le type est incomplet, en forçant le destructeur à être dans la même unité de compilation que la classe Impl le type est bien complet au moment de la destruction.

  3. #23
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Par défaut
    En fait, il semblerait que Daïmanu n'ait pas forcément tord...Il manque sans doute un destructeur a ma EI, qui est probalement en virtual pure...J'ai essayé avec un destruteur basic:

    toujours plantage.

    En tout cas, ce qui est sur 99% dorénavant, c'est que ca vient bien de la destruction de mon EI :

    j'ai essayé simplement de créer un pointeur EI, de l'allouer dynamiquement, et de le détruire...le même plantage.

    Merci si vous pouvez m'aider a trouver une piste pour faire un bon destructeur sur cette EI !

  4. #24
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Tu veux vraiment pas utiliser ton debugeur pour localiser le problème ? Ça sera plus productif que de spéculer ...

  5. #25
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Par défaut
    j'ai déjà essayé. Il ne m'indique rien (après je ne sais pas vraiment bien uttiliser un débugger )...

    Ce n'est pas de la spéculation.

    Quand j'essaye de détruire une EI, même individuel, il plante.

    C'est sur 99%

  6. #26
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 033
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par mazertys17 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
        m_EI.erase(eI);
    ca donne carrément des résultats étonnant: ca supprime d'un coup une rangé de "CharbonPetit2", sans que j'ai rien demandé, et mon objet Mouvant, qui l'utilise a chaque frame, devient super opaque( il recharge autant de fois la même image transparente )...pour planter exactement comme d'habitude...

    Tu as un multiset, donc potentiellement plusieurs fois la même occurence du même élément. Tu essaies d'enlever un élément, donc toutes les occurences ou une seule ?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  7. #27
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Par défaut
    dison que ca a l'air aléatoire...Mais vu que en l'occurance, il y avait plus de 16000 objets dans mon test, ca doit être logique...
    mais le pb est pas là, car cette fonction "efface", bien que étrange, marche...Un find aussi, en fait. Je l'utilise pour d'autres objets, et ca fonctionne sans pb...Je l'ai aussi utilisé pour les 16000 objets d'un coup, il met un petit temps, et tout est effacé sans plantage...mais dès que je touche à une EI...(car la quand j'efface, j'efface simplement l'adresse de l'EI, et non l'EI !!)

    le pb, a coup sur, c'est l'EI, qui doit avoir un destructeur en virtual pure ou quelque chose comme ca.

  8. #28
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Ton débugeur t'indique la pile d'appel normal, tu vois donc la dernière fonction appelé et celles qui ont conduit à cet appel, ce qui est d'une grande aide. Tu peux aussi exécuté pas à pas, tu verras donc par où passe le programme avant de s’arrêter.

    C'est peut-être EI qui pose problème, mais tu n'as aucun des éléments du problème de Daïmanu, la solution ne sera surement pas la même.

    @dragonjoker59: En faite il a changé le comparateur, donc erase/find vont l'utiliser ce qui ne donne pas le même comportement que sa boucle où il fait une comparaison des adresses.

Discussions similaires

  1. Réponses: 55
    Dernier message: 18/03/2014, 12h11
  2. Réponses: 11
    Dernier message: 02/12/2013, 20h49
  3. Utilisation de pointeurs
    Par renard s dans le forum Débuter
    Réponses: 7
    Dernier message: 08/12/2005, 08h18
  4. Utilisation de Pointeurs dans API windows
    Par Drooxy dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 13/03/2003, 22h39

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