سؤال

لدي حاليا فئة نموذج QT تسمى `Foo" المستمدة من QMainWindow.

الآن في بعض الطبقة الأخرى لدي شيء مثل هذا

giveacodicetagpre.

الآن هناك طريقة في SomeClass التي تحتاج إلى معرفة ما إذا كانت Foo * صالحة إذا كان يشير إلى نموذج فو صالح.أردت أن أعرف ما هو أفضل طريقة لتحقيق هذا.يجب أن أذهب مع

giveacodicetagpre.

المشكلة هي أن الطريقة المذكورة أعلاه لا gurantee نموذج صالح موثوق بها.أي اقتراحات؟

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

المحلول

أعتقد أنك تبحث عن مؤشرات ذكية. عادة، يتم ذلك هذا الاختيار من قبل مؤشر ضعيف. لن يحتفظ هذا ملكية الكائن، ولكنه يمكنه التحقق من الصلاحية مع ISNULL () .

Qt لديه فئة مريحة تأسست لهذا، والتي تسمى qweakpointer . وعادة ما تستخدم في الزوج مع مؤشرات مشتركة، والتي ستكون qsharedpointer عالم كيو تي.

يحمل فئة Qweakpointer مرجع ضعيف إلى مؤشر مشترك

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

كائنات qweakpointer لا يمكن إنشاءها إلا بواسطة تعيين من QsharedPointer.

هنا يذهب الطريقة التي يمكنك استخدامها في الواقع لمعرفة ما إذا كان Qsharederpointer الرئيسي الذي يمتلك الكائن قد حذف المؤشر المشار إليه.

bool qweakpointer :: isnull () const

إرجاع TRUE إذا كان هذا الكائن يحمل مرجعا إلى مؤشر فارغ.

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

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

نصائح أخرى

استخدم Qscopedpointer أو QsharedPointer اعتمادا على نطاق فئة FOO بدلا من FOO *.من شأنها أن تسمح بتحقق بشكل موثوق إذا كان المؤشر صالحا، ومقارنة المؤشر إلى NULL لن يساعد في اكتشاف المؤشر المحذوف الذي يشير إلى البرية.

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