مُنشئ النسخ والكائنات الثابتة: شرح أعمق
في لغة C، عند تحديد فئة، يوصى عمومًا باتباع القاعدة من ثلاثة، والذي يقترح تنفيذ منشئ نسخة، ومشغل المهمة، ومدمر. منشئ النسخ مسؤول عن إنشاء كائن جديد عن طريق نسخ البيانات من كائن موجود.
استخدام const في Copy Constructors
تقليديًا، يعتبر استخدامه ممارسة جيدة. const كنوع الوسيطة لمنشئ النسخة، كما في المثال التالي:
class ABC {
public:
int a;
int b;
ABC(const ABC &other)
{
a = other.a;
b = other.b;
}
};
ماذا يحدث بدون const؟
إذا حذفنا مؤهل const، كما هو موضح أدناه، تنشأ عدة مشكلات:
class ABC
{
public:
int a;
int b;
ABC(ABC &other)
{
a = other.a;
b = other.b;
}
};
أولاً، يصبح من المستحيل إنشاء نسخ من الكائنات الثابتة. نظرًا لعدم وضع علامة على الوسيطة على أنها const، فيمكنها قبول الكائنات غير const فقط. وبالتالي، لا يمكننا تهيئة كائن جديد من مرجع const.
ثانيًا، غياب const يعني أنه يمكن تعديل كائن الوسيطة داخل مُنشئ النسخ. هذا غير مرغوب فيه بشكل عام، حيث أن الغرض من مُنشئ النسخ هو إنشاء نسخة مماثلة من كائن موجود. يمكن أن يؤدي تعديل الكائن الأصلي أثناء النسخ إلى سلوك غير متوقع وربما غير صحيح.
أسباب استخدام وسيطات const
هناك عدة أسباب مقنعة لاستخدام وسيطات const في مُنشئات النسخ :
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3