سؤال

ولدي مؤشر إلى QScriptEngine أنني مرورا منشئ فئة فوق طاقتها من Evaluator الصف ويسند الى QScriptEngine *engine_ (فرعية الطبقة Property Evaluator، ويدعو هذا منشئ Evaluator، فمررها لQScriptEngine خصصت بالفعل). منشئ بدون وسائط يخلق مؤشر QScriptEngine الجديد (فرعية الطبقة Generic Evaluator في هذا الطريق). في destructor I اختبار إذا engine_ لا NULL، حذف المؤشر، ثم تعيينه NULL. يجب أن مؤشر (engine_) في Property المستمدة الآن أيضا أن NULL؟ شيئا يقول لي هذا ليس هو الحال. إذا لم يكن كذلك، كيف تتعاملون مع هذا الوضع؟ أنا في حاجة إلى QScriptEngine أن يكون نفس مثيل طوال الوقت. QScriptEngine ل= المشغل الخاص، أو أنني سوف تجنب مؤشر كل ذلك معا.

ورأيت بعض المعلومات عن المؤشرات المشتركة (boost::shared_ptr وstd:tr1::shared_ptr) في آخر السؤال SO. أنا بالفعل باستخدام دفعة للمكتبة التعابير المنطقية، لذلك ليس دفعة وارد إذا كان هذا هو أفضل طريقة للتعامل مع هذا. نأمل هناك وسيلة غير زيادة، لC ++ العام مشاريع المعرفة والمستقبل.

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

المحلول

ويمكنك حل هذا من خلال إعطاء واحدة من فئات (فئة A) مراقبة مدى الحياة من هذا المؤشر، جنبا إلى جنب مع طريقة 'جالبة. فإن فئة أخرى (الفئة B) ندعو دائما جالبة A كلما كان هناك حاجة المؤشر. وبهذه الطريقة، A يبقى في السيطرة على المؤشر في جميع الأوقات. الجانب السلبي هو وظيفة جالبة (فإنه سيتم على الأرجح مضمنة، لكنه ما زال على المراوغة الثاني). أيضا، B ستكون لدينا للتأكد من أن مؤشر لNULL الى حد كبير على كل استخدام.

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

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

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