تحويل Boost :: shared_ptr إلى الفصل الفعلي
-
30-09-2019 - |
سؤال
كيف يفعل شخص ما ذلك؟ فمثلا:
Client* client = it->second;
حيث-> الثاني هو دفعة :: shared_ptr إلى خطأ العميل:
cannot convert `const ClientPtr' to `Client*' in initialization
المحلول
Boost :: shared_ptr لديه طريقة .get () لاسترداد المؤشر الخام.
الوثائق هنا حول متى ولماذا لا تستخدمه: http://www.boost.org/doc/libs/1_44_0/libs/smart_ptr/shared_ptr.htm
نصائح أخرى
يمكنك استخدام ال get
طريقة على boost::shared_ptr
لاسترداد المؤشر ، لكن يكون جداً حذر في ما تفعله: يمكن أن يكون استخراج مؤشر عاري من مؤشر مشترك مرجعي خطيرًا (سيتم الحذف إذا وصل عدد المرجع إلى الصفر ، وبالتالي إبطال مؤشر RAW الخاص بك).
boost:shared_ptr
الأحمال الزائدة operator*
:
boost::shared_ptr< T > t_ptr(new T());
*t_ptr; // this expression is a T object
للحصول على مؤشر ل t
يمكنك استخدام إما get
وظيفة أو خذ *t_ptr
تبوك:
&*t_ptr; // this expression is a T*
الطريقة الأولى (باستخدام get
ربما يكون أفضل ، ولديه أقل أهمية ، لكنه يعمل فقط shared_ptr
S (أو المؤشرات مع واجهة برمجة تطبيقات متوافقة) ، وليس مع نوع آخر من المؤشرات.
ليست خطرة ولكن c-ctor المعنية.
Client client( *(it->second.get()) );