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

そもそも使用の目的全体を無効にするため、 aweak_ptrを a に変換しないでください。shared_ptrweak_ptr

shared_ptrのインスタンスからを取得するには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 に答える