我有一个 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; ?????
我有一个 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; ?????
正如已经说过的
boost::shared_ptr<Type> ptr = weak_ptr.lock();
如果您不想要异常或只是使用强制转换构造函数
boost::shared_ptr<Type> ptr(weak_ptr);
如果弱指针已经被删除,这将抛出。
您不会将 a 转换weak_ptr
为 a shared_ptr
,因为这会破坏首先使用的整个目的weak_ptr
。
要从 ashared_ptr
的实例中获取 a ,weak_ptr
请调用lock
.
通常你会做以下事情:weak_ptr
weak_ptr<foo> wp = ...;
if (shared_ptr<foo> sp = wp.lock())
{
// safe to use sp
}
boost::shared_ptr<Type> ptr = weak_ptr.lock(); // weak_ptr being boost::weak_ptr<Type>