سؤال

نعلم جميعًا أن مؤشرات RAW تحتاج إلى أن تكون ملفوفة في شكل من أشكال المؤشر الذكي للحصول على إدارة آمنة للذاكرة.ولكن عندما يتعلق الأمر بحاويات المؤشرات تصبح القضية أكثر شائكة.

تصر حاويات std على أن يكون الكائن المضمن قابلاً للنسخ، لذا فإن هذا يستبعد استخدام std::auto_ptr، على الرغم من أنه لا يزال بإمكانك استخدام Boost::shared_ptr وما إلى ذلك.

ولكن هناك أيضًا بعض حاويات التعزيز المصممة خصيصًا للاحتفاظ بالمؤشرات بأمان:
يرى مكتبة حاوية المؤشر

السؤال هو:ما هي الظروف التي يجب أن أفضّل فيها استخدام ptr_containers بدلاً من حاوية Smart_pointers؟

boost::ptr_vector<X>

or

std::vector<boost::shared_ptr<X> >
هل كانت مفيدة؟

المحلول

تتمتع حاويات مؤشر التعزيز بملكية صارمة للموارد التي تمتلكها.لدى std::vector<boost::shared_ptr<X>> ملكية مشتركة.هناك أسباب قد تجعل ذلك ضروريًا، ولكن في حالة عدم وجوده، سأختار بشكل افتراضي Boost::ptr_vector<X>.YMMV.

نصائح أخرى

ثابت على:تعد المؤشرات الذكية طريقة جيدة جدًا للتعامل مع إدارة الموارد، ولكنها ليست الوحيدة.أوافق على أنك ستشاهد عدداً قليلاً جداً من المؤشرات الأولية في كود C++ مكتوب بشكل جيد، ولكن من خلال تجربتي، فإنك لا ترى الكثير من المؤشرات الذكية أيضاً.هناك الكثير من الفئات الآمنة تمامًا للاستثناء والتي يتم تنفيذها باستخدام حاويات من المؤشرات الأولية.

حسنا، النفقات العامة هي حالة واحدة.

سيقوم متجه المؤشرات المشتركة بالكثير من النسخ الدخيل الذي يتضمن إنشاء مؤشر ذكي جديد، وزيادة مرجع، وتقليل مرجع، وما إلى ذلك عند تغيير الحجم.يتم تجنب كل هذا باستخدام حاوية المؤشر.

يتطلب إنشاء ملفات تعريف للتأكد من أن عمليات الحاوية هي عنق الزجاجة :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top