2010-10-07 9 views
3

j'ai un shared_ptr et un weak_ptrcomment convertir un coup de pouce :: weak_ptr un boost :: shared_ptr

typedef boost::weak_ptr<classname> classnamePtr; 
typedef boost::shared_ptr<x> xPtr; 

comment convertir un weak_ptr à un shared_ptr

shared_ptr = weak_ptr; 
Xptr = classnameptr; ????? 
+0

avez-vous pris la peine de regarder la [documentation] (http://www.boost.org/doc/libs/1_44_0/libs/smart_ptr/weak_ptr.htm)? C'est sur la première page. –

Répondre

8

Comme déjà dit

boost::shared_ptr<Type> ptr = weak_ptr.lock(); 

Si vous ne voulez pas une exception ou utilisez simplement le constructeur coulé

boost::shared_ptr<Type> ptr(weak_ptr); 

Cela jeter si le pointeur faible est déjà supprimé.

2
boost::shared_ptr<Type> ptr = weak_ptr.lock(); // weak_ptr being boost::weak_ptr<Type> 
7

Vous ne pas convertir un weak_ptr en un shared_ptr car cela irait à l'encontre de l'objectif d'utiliser weak_ptr en premier lieu.

Pour obtenir un shared_ptr à partir d'une instance d'un weak_ptr, appelez lock sur le weak_ptr.
Généralement, vous procédez comme suit:

weak_ptr<foo> wp = ...; 

if (shared_ptr<foo> sp = wp.lock()) 
{ 
    // safe to use sp 
} 
+0

hey idan thanx pour la réponse – Pinky

+0

typedef boost :: shared_ptr SmsMessagePtr; inorder pour éviter les références cycliques im va changer cela à faible ptr comment puis-je le faire – Pinky

+0

typedef boost :: weak_ptr classnamePtr; typedef boost :: shared_ptr classnameWeakPtr; – Pinky