QSharedPointer من مؤشر خام
-
22-12-2019 - |
سؤال
لدي حاليًا شيء مثل هذا:
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);