Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

تحرير الذاكرة باستخدام 'delete'

جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 7 من 56.

عندما تقوم بتخصيص الذاكرة ديناميكيًا باستخدام new، فإن تلك الذاكرة لا تختفي تلقائيًا عند انتهائك منها. على عكس المتغيرات العادية التي يتم تنظيفها تلقائيًا، تظل الذاكرة المخصصة ديناميكيًا قيد الاستخدام حتى تقوم بتحريرها صراحةً. هنا تصبح الكلمة المفتاحية delete ضرورية.

تقوم الكلمة المفتاحية delete بإلغاء تخصيص الذاكرة التي تم تخصيصها مسبقاً باستخدام new. عندما تستخدم delete، فإنك تخبر النظام أنك انتهيت من تلك الذاكرة وأنه يمكن إعادة استخدامها لأغراض أخرى:

int* ptr = new int(42);  // تخصيص الذاكرة
// استخدام الذاكرة...
delete ptr;              // تحرير الذاكرة

القاعدة الأساسية لإدارة الذاكرة الديناميكية بسيطة: لكل new، يجب أن يكون هناك delete مقابل. إذا نسيت حذف الذاكرة المخصصة ديناميكيًا، فإنك تتسبب في تسرب للذاكرة - حيث يستمر برنامجك في الاحتفاظ بذاكرة لم يعد يستخدمها، مما قد يؤدي في النهاية إلى نفاد الذاكرة المتاحة في نظامك.

بعد استدعاء delete على مؤشر، يصبح ذلك المؤشر غير صالح ولا ينبغي استخدامه مرة أخرى. من الممارسات الجيدة تعيين المؤشر إلى nullptr بعد الحذف لتجنب استخدامه عن طريق الخطأ.

challenge icon

التحدي

سهل

قم بإنشاء برنامج يوضح دورة حياة الذاكرة الديناميكية الكاملة من خلال تخصيص الذاكرة باستخدام new، واستخدامها، ثم إلغاء تخصيصها بشكل صحيح باستخدام delete.

سيتم توفير المدخلات التالية:

  • قيمة صحيحة (integer) لتخزينها في الذاكرة المخصصة ديناميكيًا
  • قيمة صحيحة ثانية لتحديث القيمة المخزنة

يجب أن يقوم برنامجك بما يلي:

  1. استخدام new لتخصيص ذاكرة ديناميكيًا لعدد صحيح وتخزين المؤشر في متغير يسمى dynamicPtr
  2. تعيين قيمة المدخل الأول إلى الذاكرة المخصصة ديناميكيًا باستخدام عامل إلغاء المرجعية (dereference operator)
  3. طباعة القيمة الأولية المخزنة في الذاكرة المخصصة ديناميكيًا
  4. تحديث القيمة في الذاكرة المخصصة ديناميكيًا إلى قيمة المدخل الثاني
  5. طباعة القيمة المحدثة
  6. استخدام delete لتحرير الذاكرة المخصصة ديناميكيًا
  7. تعيين المؤشر إلى nullptr بعد الحذف
  8. طباعة رسالة تأكيد تفيد بأنه تم تحرير الذاكرة بنجاح

استخدم تنسيق المخرجات الدقيق التالي:

Initial value: [first value]
Updated value: [second value]
Memory freed successfully

ورقة مرجعية

الكلمة المفتاحية delete تلغي تخصيص الذاكرة التي تم تخصيصها مسبقاً باستخدام new:

int* ptr = new int(42);  // تخصيص الذاكرة
// استخدام الذاكرة...
delete ptr;              // تحرير الذاكرة

لكل new، يجب أن يكون هناك delete مقابل لتجنب تسرب الذاكرة (memory leaks).

بعد استدعاء delete، قم بتعيين المؤشر إلى nullptr لتجنب استخدام ذاكرة غير صالحة عن طريق الخطأ:

delete ptr;
ptr = nullptr;

جرّب بنفسك

#include <iostream>
using namespace std;

int main() {
    // قراءة قيم المدخلات
    int firstValue, secondValue;
    cin >> firstValue;
    cin >> secondValue;
    
    // مهام: اكتب الكود الخاص بك أدناه
    // 1. تخصيص ذاكرة باستخدام new وتخزينها في dynamicPtr
    // 2. تعيين firstValue إلى الذاكرة المخصصة
    // 3. طباعة القيمة الأولية
    // 4. التحديث باستخدام secondValue
    // 5. طباعة القيمة المحدثة
    // 6. حذف الذاكرة وتعيين المؤشر إلى nullptr
    // 7. طباعة رسالة تأكيد
    
    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow