Voilà je commence à m'intéresser un peu aux pointeurs intelligents de boost, enfin shared_ptr. Mais je rencontre un petit problème (avec SDL).
J'ai un structure comme celle-ci (merci fearyourself ^^) :
Premièrement quand je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // Structure contenant toutes les variables globales typedef struct VARGlobales { SDL_Surface * pEcran; // Pointeur vers la fenêtre d'affichage boost::shared_ptr <SDL_Surface> pBitmapCB; // Pointeur intelligent SDL_Event event; } VARGlobales;
VARGlobales sParam = {NULL, NULL}; j'ai un message d'erreur alors que j'en ait pas lorsque je cherche qu'à initialiser à NULL le premier pointeur.
Puis un peu plus loin, j'utilise un autre shared_ptr :
De cette façon, pas de problème pour initialiser, toutefois, dès que je veux initialiser le shared_ptr de ma structure :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 // Pointeur intelligent vers un objet FenetrageSDL boost::shared_ptr <FenetrageSDL> pFenetre (new FenetrageSDL (800, 600, 32));
Ben j'ai un message d'erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part sParam.pBitmapCB = SDL_LoadBMP ("cb.bmp"); (la fonction SDL_LoadBMP renvoie un pointeur vers un SDL_Surface, ça devrait marcher :/).
Visiblement les shared_ptr n'accepte pas l'initialisation via le =. Et d'après l'opérateur surchargé =, il ne semble prendre que des shared_ptr comme valeur à droite (shared_ptr & operator=(shared_ptr const & r) // never throws).
Bref comment faire pour initialiser un pointeur intelligent avec = ? Est-il possible de surcharger son propre = ?
Et d'autre part, est-ce que les pointeurs intelligents sont lourds à utiliser (je ne parle pas au niveau de la clarté du code, de toute façon j'aime pas les typedef, je trouve ça plus clair quand je vois directement boost::shared_ptr), mais je veux parler en terme de performance ?
Mirci
![]()
Partager