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

Biblioth�ques Discussion :

[BOOST] shared_ptr et pointer C


Sujet :

Biblioth�ques

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre exp�riment�
    Avatar de zdra
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    164
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 164
    Par d�faut [BOOST] shared_ptr et pointer C
    Bonjour,

    Voil� je d�couvre les merveilles des shared_ptr<> de la boost. Probl�me j'utilise la lib SDL qui est en C dans une application C++. Donc mon programme j'utilise beaucoup de shared_ptr<SDL_Surface> mais quand je dois passer ce pointeur dans un fonction de la SDL il me dit que les types sont pas compatible.

    De plus je me pose une question, comment shared_ptr peut-il savoir que pour faire un delete de la structure il faut faire appelle � SDL_FreeSurface ??

    Bref je suis un peu dans le flou, si vous pouviez m'expliquer comment utiliser proprement ces shared_ptr avec du C ce serait g�nial.

    Merci !

  2. #2
    Membre exp�riment�
    Avatar de zdra
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    164
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 164
    Par d�faut
    J'ai en partie trouv�, suffi d'utiliser la m�thode get() pour avoir un pointeur classique. Mais alors comment �a se passe si je fais un SDL_FreeSurface() sur ce pointeur ? apres le shared_ptr<> il va etre d�truit automatiquement ? ou alors il sera invalide et �a risque de g�n�rer une exeption au prochain usage ?

  3. #3
    Membre exp�riment�
    Avatar de zdra
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    164
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 164
    Par d�faut
    Bon j'avance dans les recherces, je suis presque sur qu'il faut utiliser:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    template<class Y, class D> shared_ptr(Y * p, D d);
    J'ai vaguement compris que p sera d�truit grace � d... mais je comprends pas comment �a marche et comment concraitement l'utiliser...

  4. #4
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Si tu lui passes l'adresse de la fonction de lib�ration ?
    Cela m'a tout l'air d'attendre un foncteur ou une fonction. La FAQ parle de ces b�tes.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  5. #5
    Membre exp�riment�
    Avatar de zdra
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    164
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 164
    Par d�faut
    non la FAQ ne parle pas de ce dont j'ai besoin.

    Y*p � ce que j'ai compris c'est le pointeur qui est trait� dans le shared_ptr, pas une foncton.

    D d � ce que j'ai compris c'est un objet donc le constructeur sera appel� avec p en parametre pour le d�truire...

  6. #6
    Membre exp�riment�
    Avatar de zdra
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    164
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 164
    Par d�faut
    J'ai essay� �a:
    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
     
    class A
    {
    public:
      A(){str="gfs\n";}
      ~A(){cout << str;}
      string str;
    };
     
    class B
    {
    public:
      B(){cout << "rien" << endl;}
      B(A *&a){cout << "destructions "; delete a;}
    };
     
    int main()
    {
      A *a = new A();
      B b;
      shared_ptr<A> ptr(a, b);
    }
    Mais il fait une erreur de compilation que je comprends pas:
    zdra@gentoo:~$ g++ test.cpp -o test
    /usr/include/boost/detail/shared_count.hpp: In constructor `boost::detail::shared_count::shared_count(P, D) [with P = A*, D = B]':
    /usr/include/boost/shared_ptr.hpp:136: instantiated from `boost::shared_ptr<T>::shared_ptr(Y*, D) [with Y = A, D = B, T = A]'
    test.cpp:26: instantiated from here
    /usr/include/boost/detail/shared_count.hpp:344: erreur: pas de concordance pour l'appel de � (B) (A*&) �

  7. #7
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Si, si. On parle bien des foncteurs dans la FAQ.
    http://c.developpez.com/faq/cpp/?page=STL#STL_functor
    Le constructeur de B sera non sp�cifi� (le constructeur par d�faut g�n�r� par d�faut suffisant ici), mais son op�rateur() prendra une r�f�rence sur un pointeur vers A.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  8. #8
    Membre exp�riment�
    Avatar de zdra
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    164
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 164
    Par d�faut
    Ok� merci je connaissais absolument pas cette histoire de foncteur. D�cid�ment la FAQ faut la lire completement il n'y a pas une miette � perdre !

    Bref mon code suivant marche nickel:
    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
     
    class A
    {
    public:
      A(){str="gfs\n";}
      ~A(){cout << str;}
      string str;
    };
     
    struct B
    {
      void operator ()(A *&a) const 
       { 
         cout << "destruction ";
          delete a;
       } 
    };
     
    int main()
    {
      B b;
      shared_ptr<A> ptr(new A(), b);
    }

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 8
    Dernier message: 25/03/2008, 21h59
  2. R�ponses: 12
    Dernier message: 25/02/2008, 14h27
  3. Copie de boost::shared_ptr
    Par Kurisu dans le forum Boost
    R�ponses: 2
    Dernier message: 07/09/2006, 15h29
  4. [BOOST] shared_ptr et void*
    Par bourrik dans le forum Biblioth�ques
    R�ponses: 16
    Dernier message: 16/06/2006, 17h12
  5. boost::shared_ptr et singletons
    Par Elendil_BzH dans le forum Biblioth�ques
    R�ponses: 2
    Dernier message: 15/01/2006, 20h45

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