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 ^^) :

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;
Premièrement quand je fais
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 :
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));
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
sParam.pBitmapCB = SDL_LoadBMP ("cb.bmp"); (la fonction SDL_LoadBMP renvoie un pointeur vers un SDL_Surface, ça devrait marcher :/).
Ben j'ai un message d'erreur.

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