c++ - لغة - كتاب فيجوال بيسك دوت نت من الصفر الى الاحتراف



لماذا يجب ألا تستخدم المراجع إلى المؤشرات الذكية؟ (4)

أتذكر القراءة في مكان ما أن استخدام إشارات إلى مؤشرات الذكية يمكن أن يسبب فساد الذاكرة. هل هذا ببساطة بسبب استخدام إشارة المؤشر الذكية بعد أن تم تدميرها؟ أو هل الحصول على فوضى العد إشارة تصل؟

شكرا للتوضيح


Answer #1

على افتراض أنك تتحدث عن share_ptr هنا ...

هل هذا ببساطة بسبب استخدام إشارة المؤشر الذكية بعد أن تم تدميرها؟

هذه إجابة جيدة. قد لا تعرف على الاطلاق عمر المؤشر يشير المرجع الخاص بك أيضا.

للتغلب على هذا، كنت ترغب في النظر في دفعة :: ضعيف_ptr. أنها لا تشارك في العد المرجعي. عندما كنت في حاجة لاستخدامه، فإنه يوفر لك common_ptr الذي يذهب بعيدا مرة واحدة الخاص بك القيام به معها. وسوف تتيح لك أيضا معرفة متى تم إحالة إلى مؤشر تم جمعها.

من الوثائق الضعيفة

يقوم قالب فئة ضعيف_ptr بتخزين "مرجع ضعيف" إلى كائن يدار بالفعل بواسطة common_ptr. للوصول إلى الكائن، يمكن تحويل hide_ptr إلى common_ptr باستخدام منشئ common_ptr أو قفل وظيفة العضو. عندما يتم حذف المشاركة المشتركة__ _ __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ to and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and and : قفل سيعود فارغة common_ptr.

لاحظ الطريقة انتهت () سوف اقول لكم أيضا إذا كان بت لا يزال حولها.


Answer #2

عند استخدام المؤشرات الذكية (أو أي كائن إدارة تخصيص) كنت تعول على السلوكيات المحددة في منشئ / ديستروكتور لإدارة ريف / ديريفس / أقفال / فتح. ونتيجة لذلك، يجب أن تكون هذه الأنواع من الكائنات كائنات صحيحة لأداء بشكل صحيح. عند استخدام إشارات إلى مثل هذه الأشياء (أو مؤشرات) كنت تجاوز الآلية (ويسأل عن ويدجي).


Answer #3

يتم إدارة الجزء "الذكية" من المؤشرات الذكية من قبل منشئ، المدمرات، مشغلي أسيغمينت، وغيرها من المهام من فئة مؤشر الذكية. باستخدام مرجع، كنت التحايل على هذه العمليات - لن يتم استدعاء منشئ عندما يتم تهيئة المرجع الخاص بك، ولن تحصل على ديستروكتور يسمى عندما يخرج مرجع الخاص بك خارج النطاق.

في جوهرها، إشارة إلى مؤشر الذكية هو مؤشر البكم، مع كل المخاطر و غوتشاس أن هذا الأخير يستتبع.


Answer #4

لدينا العرف سمارتبوانترز ونحن دائما جعل هذه العادة من تمرير "كونفس ريفسوميثينغ &

فإنه لا زيادة أو تناقص مؤشر الذكية، وعلى هذا النحو - والأهم من ذلك - يتم تجنب المكالمات إنتيرلوكيدينكرمنت / النقصان الذي يتجنب يتجنب سياج الذاكرة وجميع الأشياء التي تذهب مع ذلك: تأمين الحافلات، وإبطال ذاكرة التخزين المؤقت، .. .





smart-pointers