4

我有一个 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; ?????
4

3 回答 3

9

正如已经说过的

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

如果您不想要异常或只是使用强制转换构造函数

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

如果弱指针已经被删除,这将抛出。

于 2010-10-07T12:21:34.747 回答
8

您不会将 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
}
于 2010-10-07T12:21:10.710 回答
2
boost::shared_ptr<Type> ptr = weak_ptr.lock(); // weak_ptr being boost::weak_ptr<Type>
于 2010-10-07T12:20:08.150 回答