C++ 如何将boost::weak\u ptr转换为boost::shared\u ptr

C++ 如何将boost::weak\u ptr转换为boost::shared\u ptr,c++,boost,boost-smart-ptr,C++,Boost,Boost Smart Ptr,我有一个共享的ptr和一个弱的ptr typedef boost::weak_ptr<classname> classnamePtr; typedef boost::shared_ptr<x> xPtr; boost::shared_ptr ptr=weak_ptr.lock();//弱ptr被提升::弱ptr 您不能将弱\u ptr转换为共享\u ptr,因为这首先会破坏使用弱\u ptr的全部目的 要从弱\u ptr的实例中获取共享\u ptr,请在弱\u ptr上

我有一个共享的ptr和一个弱的ptr

typedef boost::weak_ptr<classname> classnamePtr;
typedef boost::shared_ptr<x> xPtr;
boost::shared_ptr ptr=weak_ptr.lock();//弱ptr被提升::弱ptr

您不能将
弱\u ptr
转换为
共享\u ptr
,因为这首先会破坏使用
弱\u ptr
的全部目的

要从
弱\u ptr
的实例中获取
共享\u ptr
,请在
弱\u ptr
上调用
通常,您会执行以下操作:

weak_ptr<foo> wp = ...;

if (shared_ptr<foo> sp = wp.lock())
{
    // safe to use sp
}
weak_ptr wp=。。。;
if(shared_ptr sp=wp.lock())
{
//安全使用sp
}
如前所述

boost::shared_ptr<Type> ptr = weak_ptr.lock(); 
boost::shared_ptr ptr=weak_ptr.lock();
如果不希望出现异常,或者只需使用强制转换构造函数

boost::shared_ptr<Type> ptr(weak_ptr);
boost::共享ptr(弱ptr);

如果弱指针已被删除,此操作将抛出。

hey idan thanx for the ResponseyPedef boost::SharedptrSMSMessageptr;为了避免循环引用,我将把它改为弱ptr,我该怎么做呢;typedef boost::shared_ptr classnamewakptr;这就是我们在您的
shared\u ptr
typedef中声明弱\u ptrwell的方式吗?这里有一个单词
weak
,因此可能会产生误导。但是为了给你一个更完整的答案,你必须展示更多的代码,并且更加具体。你有没有费心去看这个?在第一页。
boost::shared_ptr<Type> ptr = weak_ptr.lock(); 
boost::shared_ptr<Type> ptr(weak_ptr);