c++ هل يجب تعيين أو إعادة تعيين فريدة من نوعها؟



c++11 smart-pointers (2)

نظرا للوضع المشترك حيث يرتبط عمر الكائن المملوكة لصاحبها، يمكنني استخدام مؤشر فريد من بين 2 طرق. .

يمكن تعيينه:

class owner
{
    std::unique_ptr<someObject> owned;    
public:
    owner()
    {
        owned=std::unique_ptr<someObject>(new someObject());        
    }
};

يمكن استخدام طريقة إعادة الضبط:

class owner
{
    std::unique_ptr<someObject> owned;    
public:
    owner()
    {
        owned.reset(new someObject());
    }
};

ولصالح أفضل الممارسات، هل ينبغي لي أن تفضل شكلا واحدا على الآخر؟

إديت: آسف الناس. أنا أكثر من تبسيط هذا. يحدث تخصيص كومة الذاكرة المؤقتة في طريقة إنيتيز وليس في كتور. لذلك، لا أستطيع استخدام قوائم إنيتياليزر.


Answer #1

من مستندات operator= unique_ptr s operator= :

نقل ملكية الكائن المشار إليه بواسطة r إلى * هذا كما لو كان عن طريق استدعاء reset(r.release()) تليها تعيين من std::forward<E>(r.get_deleter()) .

وكل ما تحتاجه من ذلك هو reset الدعوة، لذلك فمن أبسط لمجرد استدعاء مباشرة


Answer #2

الطريقة الصحيحة للقيام بذلك (التي لم تكن قائمة) هو استخدام منشئ owned :

owner() : owned(new someObject())
{}

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





unique-ptr