سؤال

هل توجد مجموعة، وهذا يدرك من Shared_Ptr Internals، ويتجنب نسخ منتظم من عناصر Shared_ptr المخزنة لصالح فقط نسخ مؤشرها الضعيف الداخلي؟

هذا يعني ضمنيا، أنه لن يتم إجراء مكالمات منشئ / مدمر وأنه لن يكون هناك معالجة عدادات مرجعية Shared_ptrs.

هل كانت مفيدة؟

المحلول

هذا يدرك من Shared_Ptr Internals،

يجب أن تجيب على سؤالك هناك. أن تكون على دراية بالجنبي، من المؤكد أن هذه المجموعة سيتعين عليها أن تكون جزءا من مكتبات المؤشر الذكية دفعة. لسوء الحظ، لا يوجد شيء من هذا القبيل.

هذا هو في الواقع الجانب السلبي للمؤشرات الذكية. أود أن أوصي باستخدام هياكل البيانات التي تحد من عدد النسخ التي يتم داخليا. إعادة تخصيص المتجهات ستكون مؤلمة. ربما تكون Deque، التي لديها تخصيص مقصود، مفيد. ضع في اعتبارك أن تطبيقات Vector تميل إلى الحصول على ذاكرة جديدة في الزائد المتزايد بشكل كبير. لذلك لا يدريون، يقول، كل 10 عناصر. بدلا من ذلك، قد تبدأ ب 128 عنصرا، ثم تحتفظ المتجاه بحنف 256، ثم يتحرك ما يصل إلى 512، 1024، إلخ. في كل مرة مضاعفة ما هو مطلوب.

اختصار هذا هناك ptr_vector boost أو prealllocating هياكل البيانات الخاصة بك مع مساحة كافية لمنع النسخ الداخلي.

نصائح أخرى

من الناحية النظرية، بعد اعتماد C ++ 0x، سيتم تعديل الحاويات لاستخدام Deving Semantics عند الاقتضاء. في تلك النقطة، shared_ptr يمكن أيضا تعديلها للحصول على منشئ خطوة لتقليل تعديل عدد المرجع غير الضروري.

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