السلام عليكم ورحمة الله
مرحبا بكم في أخترنا لك(5)
الفهرس الرئيس لــ سلسلة أخترنا لك فى سي++
أخترنا لك(5) : ﻻتخلط بين استخدام delete و delete[] .
هناك عادة شائعة بين المبرمجين ﻻ ادري اين مصدريها تقول ممكن ان نستخدم الكلمة المحجوزة delete بدﻻ من delete[] لتحرير مساحة الذاكرة الديناميكية المحجوزة للمصفوفة من انواع البيانات اﻻساسية فى محبوبتى سي++. مثال
int *p = new int[10]; delete p; // خطأ يجب ان تكون delete[] p
طبعا العادة او التقليد السابق خاطئ تماما. ﻻن مواصفات سي++ القياسية تقول ان استخدام delete لتحرير اى مساحة ذاكرة محجوزة ديناميكيا لمصوفة من احد اﻻنواع اﻻساسية هو سلوك غير مُعرف undefined behavior اى ان اللغة لم تضع لة مقياسا وبالتالى النتائج المترتبة على تكون خطيرة. والحقيقة ان فى بعض نظم التشغيل البرامج التى تستخدم delete بدﻻ من delete[] ﻻتسبب انهيار للبرنامج او قد تكون متروكة للحظ وانت نصيبك يعني ممكن البر نامج ينهار او يعمل بشكل يبدو صحيح. كمثال فى المترجم فجوال سي++ يدعم كلا من delete و delete[] للأنواع اﻻساسية باستدعاء الدالة free() ومع ذلك ﻻ توجد اي ضمانات ان النسخ المستقبلية من فيجوال سي++ سوف تدعم هذة الميزة باﻻضافة الى ذلك المشاكل الناتجة عن تشغيل الكود على مترجم آخر .
والخلاصة ان استخدام delete بدﻻ من delete[] او العكس بالعكس شئ خطير ويجب علينا تجنية.
وتصحيح الكود السابق هو:
delete[] p;
هل يذكر احدكم شئ عن العادات الغير معرفة فى سي++ ؟ التى يظن البعض انها صحيح.

