سؤال

لدي مشاركة وضعف وضعف

typedef boost::weak_ptr<classname> classnamePtr;
typedef boost::shared_ptr<x> xPtr;

كيفية تحويل epon_ptr إلى shared_ptr

shared_ptr = weak_ptr;
Xptr = classnameptr; ?????
هل كانت مفيدة؟

المحلول

كما قال بالفعل

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

إذا كنت لا تريد استثناء أو ببساطة استخدم مُنشئ المصبوب

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

هذا سوف يرمي إذا تم حذف المؤشر الضعيف بالفعل.

نصائح أخرى

أنت لا تقوم بتحويل أ 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
}
boost::shared_ptr<Type> ptr = weak_ptr.lock(); // weak_ptr being boost::weak_ptr<Type>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top