سؤال

كيف يفعل شخص ما ذلك؟ فمثلا:

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_ptrS (أو المؤشرات مع واجهة برمجة تطبيقات متوافقة) ، وليس مع نوع آخر من المؤشرات.

ليست خطرة ولكن c-ctor المعنية.

Client client( *(it->second.get()) );
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top