كيفية تحويل دفعة:
-
28-09-2019 - |
سؤال
لدي مشاركة وضعف وضعف
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>
لا تنتمي إلى StackOverflow