English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

ملاحظات عند استخدام new في بناء المكونات في C++

المشاكل التي تواجهها عند استخدامه new لتحديث عضو البادئة في الكائن

في مبنى الكائن باستخدام new لتحديث عضو البادئة، فإنه يجب استخدامه delete في مبنى الدمار، وتتوافق new مع delete، وتتوافق new[] مع delete[].

في حالة وجود العديد من وظائف البناء، يجب استخدام الطريقة نفسها لاستخدام new، سواء كان new أم new[]، لأن هناك وظيفة تفريغ واحدة فقط، وكل وظيفة بناء يجب أن تكون متوافقة مع وظيفة التفريغ.

PS. بالطبع، عند استخدام new لتحديد المؤشر في وظيفة البناء، يمكن تحديد المؤشر على أنه فارغ (0/NULL أو nullptr في C++11)، لأن delete يتعامل مع المؤشرات الفارغة بشكل متوافق، سواء كان هناك [] أم لا.

في حالة وجود العديد من وظائف البناء، يجب استخدام الطريقة نفسها لاستخدام new، سواء كان new أم new[]، لأن هناك وظيفة تفريغ واحدة فقط، وكل وظيفة بناء يجب أن تكون متوافقة مع وظيفة التفريغ.

وظيفة بناء المقدمة:

  • تخصيص مساحة كافية لتخزين البيانات المكررة
  • استنساخ البيانات ليس مجرد عنوان
  • تحديث الأعضاء الثابتة المتأثرة
String:String(const String & st)
{
  num_Strings++;
  len = st.len;
  str = new char[len+1];
  std::strcpy(str,st.str);
}

وظيفة بناء المقدمة:

  • تحقق من حالة التكرار الذاتي
  • إطلاق العنان لمؤشرات الع quarters قبل تشغيلها
  • استنساخ البيانات ليس مجرد عنوان
  • يُرجع إشارة إلى الكائن الذي تم استدعاءه
String & String:operator=(const String & st)
{
  if(this == &st)
    return *this;
  else
    delete [] str;
    len = st.len;
    str = new char[len+1];
    std::strcpy(str,st.str);
  return *this;
}

هذا هو محتوى المقال الكامل، نأمل أن يكون محتوى هذا المقال قد ساعدكم في التعلم أو العمل، ونأمل أيضًا أن تشجعوا على دعم تعليمات النطق!

بيان: محتوى هذا المقال تم جمعه من الإنترنت، ويتمتع صاحب الحقوق به، والمحتوى تم إدراجه من قبل مستخدمي الإنترنت الذين قاموا بتحميله بمفردهم، ويستخدم هذا الموقع حقوق الملكية الخاصة به، ويتم التعامل مع المحتوى بشكل غير محرر، ولا يتحمل هذا الموقع أي مسؤولية قانونية. إذا وجدت محتوى يشتبه في انتهاك حقوق النسخ، فالرجاء إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال '#' بـ '@') لإبلاغنا، وقدم الدليل على الدليل، وسيتم حذف المحتوى المزعوم عن انتهاك حقوق النسخ على الفور.

أنت قد تعجبك