سؤال

لدي حاليًا شيء مثل هذا:

QSharedPointer<t> Qsharedfoo;

الآن لدي مؤشر أولي لـ foo يُسمى أيضًا rawfoo.كيف يمكنني جعل نقطة foo تمتلك المؤشر الخام والبدء في الإشارة إليه.أعرف أنه من الممكن استخدام المؤشرات المشتركة boost::make_sharedكيف نفعل ذلك مع QSharedPointer ?

أريد أن أفعل شيئا مثل هذا:

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

المحلول

كيف يمكنني جعل نقطة foo تمتلك المؤشر الخام والبدء في الإشارة إليه.أعلم أنه في التعزيز باستخدام المؤشرات المشتركة يمكننا استخدام Boost::make_shared كيف نفعل ذلك باستخدام QSharedPointer؟

لا يمكنك ذلك للأسف.

  • ستحتاج دائمًا إلى المرور عبر المُنشئ بخلاف make_shared.

  • إنها ليست بالضرورة آمنة للاستثناء.

باختصار، سوف تحتاج إلى المرور عبر المنشئ و المشغل= على النحو التالي:

Qsharedfoo = QSharedPointer<T>(rawfoo); // operator=() overload

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

Qsharedfoo.reset(rawFoo);

ولكن كما ذكرنا في البداية، هذه العمليات ليست مساوية لما تبحث عنه.

نصائح أخرى

مباشرة من وثائق كيو تي, ، لدينا شيء مثل هذا:

QSharedPointer<MyObject> obj = QSharedPointer<MyObject>(new MyObject);

يمكنك بشكل أساسي تمرير المؤشر بنفس الطريقة:

// Here I assume that T is the class you're using for Qsharedfoo.
QSharedPointer<T> Qsharedfoo = QSharedPointer<T>(rawfoo);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top