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 :

Boost & smart pointers


Sujet :

Boost C++

  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Par défaut Boost & smart pointers
    Hello!

    Voilà je débute avec Boost et les smart pointers et je voudrais savoir si le code suivant est correct...
    D'après ce que j'ai compris des docs, mon scoped_ptr va faire en sorte de supprimer le pointeur quand ma mythrd sera fini d'être exécuté.
    Le fait qu'il soit dans un while est-ce problématique ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (!loop)
    {
    	req = get();
     
            func = boost::bind( &MyClass::myMethod, req );
            scoped_ptr<boost::thread> mythrd ( new boost::thread ( func ));
    }
    Merci pour vos réponses!

    Go

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Normalement une variable déclarée dans un bloc n'existe plus en dehors de ce bloc il me semble qu'elle est détruite.

    Par rapport à la tâche qui s'execute je ne vois pas où cela pourrait poser probléme par contre

  3. #3
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    A chaque itération, un nouveau thread est créé et le précédent est supprimé, ou plutôt l'objet contenant le thread est supprimé, pas le thread lui-même.

  4. #4
    Membre averti
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Par défaut
    Merci de vos réponses!
    Je suis d'accord que l'objet qui contient l'adresse du thread est écrasé à chaque itération, mais le fait de mettre un "scoped_ptr" ne sert pas sauf pour le dernier thread créé en cas de sortie du while n'est ce pas ?

  5. #5
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    En sortie de boucle ta variable pointeur intelligent sera aussi détruite(je pense) car elle est ne devrait plus exister en dehors du bloc dans lequel elle a été déclarée.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Par défaut
    Citation Envoyé par Goduak Voir le message
    Merci de vos réponses!
    Je suis d'accord que l'objet qui contient l'adresse du thread est écrasé à chaque itération, mais le fait de mettre un "scoped_ptr" ne sert pas sauf pour le dernier thread créé en cas de sortie du while n'est ce pas ?
    Lors de la sortie du bloc, c'est à dire à chaque itération, le scoped_ptr sera détruit (pas "écrasé").
    Le rôle de scoped_ptr est précisément de faire :
    ptr étant le pointeur passé à son constructeur, dans ce cas cela équivaut à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete new boost::thread ( func );
    ce qui ne sert à rien, autant écrire juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boost::thread ( func );

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/03/2008, 11h25
  2. Smart Pointer
    Par Fry dans le forum C++
    Réponses: 5
    Dernier message: 03/10/2005, 23h13
  3. [BOOST] shared_ptr et pointer C
    Par zdra dans le forum Bibliothèques
    Réponses: 7
    Dernier message: 08/05/2005, 14h15
  4. Utilisation des smart pointer
    Par 0xYg3n3 dans le forum MFC
    Réponses: 11
    Dernier message: 22/04/2005, 18h37
  5. templates et smart pointers
    Par delire8 dans le forum C++
    Réponses: 9
    Dernier message: 10/07/2003, 16h26

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