المراجع (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).