2010-10-07 48 views
3

我有一個shared_ptr和weak_ptr的如何一個boost :: weak_ptr的以一個boost :: shared_ptr的

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

如何將了weak_ptr轉換爲一個shared_ptr

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

你麻煩看看[documentation](http://www.boost.org/doc/libs/1_44_0/libs/smart_ptr/weak_ptr.htm)嗎?它在第一頁上。 – 2010-10-07 13:53:07

回答

8

前面已經說過

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

如果你不想異常或簡單地使用鑄鐵構造

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

這將拋出如果弱指針已被刪除。

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

您轉換請不要將weak_ptr轉換爲shared_ptr,因爲這將首先破壞使用weak_ptr的整個目的。

要從weak_ptr的實例中獲得shared_ptr,請致電weak_ptr上的lock
通常你會做到以下幾點:

weak_ptr<foo> wp = ...; 

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

hey idan thanx for the response – Pinky 2010-10-07 12:23:23

+0

typedef boost :: shared_ptr SmsMessagePtr;爲了避免循環引用我會改變這個弱ptr我該怎麼做 – Pinky 2010-10-07 12:24:13

+0

typedef boost :: weak_ptr classnamePtr; typedef boost :: shared_ptr classnameWeakPtr; – Pinky 2010-10-07 12:27:26

相關問題