如何将boost :: weak_ptr转换为boost :: shared_ptr

时间:2010-10-07 12:14:12

标签: c++ boost boost-smart-ptr

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

3 个答案:

答案 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>