我有一个shared_ptr和一个weak_ptr
typedef boost::weak_ptr<classname> classnamePtr;
typedef boost::shared_ptr<x> xPtr;
如何将weak_ptr转换为shared_ptr
shared_ptr = weak_ptr;
Xptr = classnameptr; ?????
答案 0 :(得分:8)
如前所述
boost::shared_ptr<Type> ptr = weak_ptr.lock();
如果您不想要例外或只是使用强制转换构造函数
boost::shared_ptr<Type> ptr(weak_ptr);
如果弱指针已被删除,则抛出。
答案 1 :(得分:7)
您不会将weak_ptr
转换为shared_ptr
,因为这会首先打败使用weak_ptr
的目的。
要从shared_ptr
的实例获取weak_ptr
,请在lock
上致电weak_ptr
。
通常你会做以下事情:
weak_ptr<foo> wp = ...;
if (shared_ptr<foo> sp = wp.lock())
{
// safe to use sp
}
答案 2 :(得分:2)
boost::shared_ptr<Type> ptr = weak_ptr.lock(); // weak_ptr being boost::weak_ptr<Type>