شرح C++

المراجع والذاكرة الديناميكية

المراجع (References)

المرجع اسم بديل لمتغيّر موجود — أي تعديل عليه يعدّل الأصل:

int original = 10;
int& ref = original;   // ref مرجع لـ original

ref = 25;
cout << original;      // 25 (تغيّر الأصل!)

المراجع في الدوال (تمرير بالمرجع)

تتيح للدالة تعديل المتغيّر الأصلي، وتتجنّب نسخ القيم الكبيرة:

void doubleValue(int& n) {
    n *= 2;
}

int main() {
    int x = 5;
    doubleValue(x);
    cout << x;   // 10 (تعدّل الأصل)
}

قارنها بالتمرير بالقيمة (نسخة، لا تؤثّر على الأصل):

void noChange(int n) { n *= 2; }   // نسخة محلّية فقط

الذاكرة الديناميكية: new و delete

لتخصيص ذاكرة أثناء التشغيل (حجمها غير معروف مسبقًا):

int* ptr = new int;    // تخصيص
*ptr = 42;
cout << *ptr;          // 42

delete ptr;            // تحرير الذاكرة
ptr = nullptr;         // تجنّب المؤشّر المعلّق

⚠️ لكل new يجب delete مقابل — وإلا حدث تسريب ذاكرة (Memory Leak).

المصفوفات الديناميكية

int n;
cin >> n;
int* arr = new int[n];   // حجم يحدّده المستخدم

for (int i = 0; i < n; i++) {
    arr[i] = i * 10;
}

delete[] arr;            // لاحظ [] للمصفوفات

نصيحة حديثة

💡 في C++ الحديث، يُفضّل تجنّب new/delete اليدوي واستخدام vector (للمصفوفات المتغيّرة) والمؤشّرات الذكية (smart pointers) التي تحرّر الذاكرة تلقائيًّا.

أخطاء شائعة

  • نسيان delete فيحدث تسريب ذاكرة.
  • استخدام delete بدل delete[] للمصفوفات.
  • استخدام مؤشّر بعد حذفه (dangling pointer).

🎯 التالي: الهياكل والتعدادات (struct و enum).