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

Boost C++ Discussion :

question debutant; shared_ptr


Sujet :

Boost C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Points : 41
    Points
    41
    Par défaut question debutant; shared_ptr
    bonjour,

    je suis un tout nouvelle utilisateur de boost et j'ai quelques questions.
    J'ai regardé les tutoriels sur differents site mais comme boost possède de nombreux éléments, ces derniers tutos sont très vaste.

    Mes questions sont tout de même relativement simple:

    déjà, comment peut on assigner un shared_ptr à une variable déjà existante ?
    par exemple on peut faire ceci;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int entier = 78;
    int * pointeur = &entier;
    entier =12;
    cout << *pointeur << endl; // 12
    Ceci mais avec un shared_ptr

    ou encore assigner un shared_ptr sur un autre shared_ptr ?

  2. #2
    En attente de confirmation mail

    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 : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Les pointeurs intelligents c'est pour les DAO (Objets alloué dynamiquement, ie via new), aucun interet des les utiliser dans le code que tu montres.

    Pour ta seconde question, tout simplement p1 = p2 (avec p1 et p2 des pointeurs intelligents)

    Deux choses à noter:
    - Ton compilateur possède surment les shared_ptr dans le header <memory>, pas besoin d'utiliser boost.
    - Les pointeurs intelligents c'est bien quand tu ne peus pas définir un responsable à ta variable, si tu arrives à le faire pas besoin de pointeur intelligent normalement (cf strict ownership vs shared ownership)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    ok, mais pour ce qui est de la seconde question, j'ai;


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    boost::shared_ptr<int> pointeur(new int(23));
    boost::shared_ptr<int> pointeur2;
    pointeur = pointeur2;
    cout << *pointeur2 << endl;
    et j'obtiens une erreur:
    Assertion failed: px != 0, file c:\mingw\bin\../lib/etc/shared_ptr.hpp, line 412

    This application has requested the Runtime to terminate it in an unusual way.
    Please contact....etc
    C'est normal ?

  4. #4
    En attente de confirmation mail

    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 : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Oui.

    Je vais prendre ton programme ligne par ligne :

    Tu créé un pointeur intelligent 1 et tu lui dit de gérer un nouveau int, il le fait.

    Tu créé un pointeur intelligent 2 et tu lui dit de ne rien gérer pour le moment, il le fait.

    Tu dit au pointeur 1 de gérer la même chose que le pointeur 2, ie rien, il le fait.

    Tu demandes au pointeur 2 de te retourner la valeur qu'il gère, or il ne gère rien : boum.

    Si tu mets pointeur2 = pointeur1; ca marchera surment mieux (l'opérateur = n'est pas symétrique).

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    ouf la oui, jpense que jvais arreter la prog pour ce soir, c'est un gros signe de fatigue
    merci tout de même^^

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    Bon et bien malgrès tout, j'ai quand même persisté à vouloir continuer.
    Je suis arrivé sur un nouveau problème; en faite à la base, je remplace des pointeurs classique par des pointeur intelligent sur un projet où je me suis retrouvé dernierement avec une petit fuite de mémoire.
    Je réalise que j'ai beaucoups fait de teste suivant;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MaClasse *ptr = 0;
    //du code
    if(ptr == 0)
    Il y a un moyen de savoir si le shared_ptr est initialisé ? et un moyen de le reinitialiser (ptr = 0) ?

  7. #7
    En attente de confirmation mail

    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 : 34
    Localisation : France, Doubs (Franche Comté)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Tu sais qu'il existe une documentation quand même ! Si je prend la norme (donc pas ceux de boost mais du standard, mais ca doit être en gros les même)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(ptr) //test si le ptr (de type shared_ptr<>), gère bien quelque chose (ie si il est bien initialisé
    ptr.reset() //réinitialise ptr

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    Parfait merci beaucoups

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

Discussions similaires

  1. LookAndFeel (question debutant)
    Par Asnidren dans le forum Interfaces Graphiques en Java
    Réponses: 9
    Dernier message: 04/05/2007, 10h31
  2. question debutant ..
    Par elghadi_mohamed dans le forum Débuter
    Réponses: 17
    Dernier message: 09/11/2006, 17h00
  3. [JSP] Questions debutant
    Par K-Kaï dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 02/06/2006, 19h27
  4. [petites questions][debutant]run et mise en forme
    Par kurgan dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 22/10/2005, 18h40
  5. [langage] Question débutant compilation PERL
    Par sebbyoguard dans le forum Langage
    Réponses: 5
    Dernier message: 04/09/2004, 20h39

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