我有一個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; ?????
我有一個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; ?????
前面已經說過
boost::shared_ptr<Type> ptr = weak_ptr.lock();
如果你不想異常或簡單地使用鑄鐵構造
boost::shared_ptr<Type> ptr(weak_ptr);
這將拋出如果弱指針已被刪除。
boost::shared_ptr<Type> ptr = weak_ptr.lock(); // weak_ptr being boost::weak_ptr<Type>
您轉換請不要將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
}
你麻煩看看[documentation](http://www.boost.org/doc/libs/1_44_0/libs/smart_ptr/weak_ptr.htm)嗎?它在第一頁上。 – 2010-10-07 13:53:07