0Pricing
C++ Academy · درس

‏nullptr وأمان المؤشرات الفارغة

استخدم nullptr بدلًا من NULL أو 0، واحمِ البرنامج من إلغاء إشارة المؤشرات الفارغة.

‏nullptr وأمان المؤشرات الفارغة درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

ما المؤشر الفارغ؟

المؤشر الفارغ قيمة خاصة تشير إلى "لا شيء". ويُعد إلغاء إشارته سلوكًا غير معرّف — وغالبًا ما يؤدي إلى تعطل البرنامج بخطأ تجزئة.

nullptr في C++ الحديثة

منذ C++11، تمثل الكلمة المفتاحية nullptr قيمة حرفية لمؤشر فارغ ذي نوع محدد. استخدمها بدلًا من NULL أو 0.

int* p1 = nullptr;
int* p2 = NULL;       // legacy macro
int* p3 = 0;          // legacy literal

لماذا nullptr؟

إن NULL مجرد macro لـ 0. وقد يربك حل التحميل الزائد بين int وint*. أما nullptr فلها النوع الفريد std::nullptr_t.

void f(int);
void f(int*);

f(NULL);      // calls f(int) -- surprising!
f(nullptr);   // calls f(int*) -- correct

التحقق من الفراغ

تتحول المؤشرات ضمنيًا إلى bool: المؤشر غير الفارغ قيمته true، والفارغ قيمته false.

if (p) std::cout << "has value\n";
if (!p) std::cout << "is null\n";
if (p != nullptr) std::cout << "explicit form\n";

التهيئة دائمًا

تحتوي المؤشرات غير المهيّأة على قيم عشوائية وتتظاهر بأنها تشير إلى موضع ما. احرص دائمًا على تهيئتها، حتى إن كانت التهيئة إلى nullptr فقط.

int* p;            // BAD: undefined contents
int* q = nullptr;  // GOOD

إلغاء إشارة مؤشر فارغ

تُعد قراءة مؤشر فارغ أو الكتابة عبره سلوكًا غير معرّف. وفي معظم أنظمة سطح المكتب يؤدي ذلك إلى خطأ تجزئة. أما في الأجهزة المضمنة فقد يتسبب في إفساد الذاكرة بصمت.

عمليات التحقق الوقائية

تحقق قبل إلغاء الإشارة في واجهات برمجة التطبيقات العامة أو عندما يُحتمل أن يمرر المستدعي قيمة فارغة.

void process(int* data) {
    if (!data) return;
    *data *= 2;
}

المراجع بدلًا من المؤشرات

إذا لم تكن القيمة الفارغة ذات معنى مطلقًا، فاستخدم وسيطًا مرجعيًا. يضمن المصرّف ارتباط المرجع بشيء ما.

// Before
void f(Widget* w);   // can be null?

// After
void f(Widget& w);   // must be a real widget

استخدام std::optional للقيم الاختيارية

أضافت C++17 النوع std::optional<T> للتعبير عن معنى "قد توجد قيمة" — وهو أوضح من استخدام مؤشر قابل لأن يكون فارغًا في السياقات التي لا تتضمن تخصيصًا.

#include <optional>
std::optional<int> find(int x);
if (auto v = find(42)) std::cout << *v;

المؤشرات الذكية والقيم الفارغة

يمكن أن تكون std::unique_ptr وstd::shared_ptr فارغتين أيضًا. وتتحولان إلى bool لإجراء عمليات التحقق، وتُعاد تهيئتهما باستخدام = nullptr.

خطأ شائع: المؤشر المتدلي بعد delete

بعد تنفيذ delete p، يظل المؤشر محتفظًا بالعنوان القديم. أعد تهيئته: p = nullptr;. تتولى المؤشرات الذكية ذلك تلقائيًا.

اختبار سريع

ما القيمة الحرفية للمؤشر الفارغ التي ينبغي استخدامها في C++ الحديثة؟

مراجعة

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

الأسئلة الشائعة

هل درس «‏nullptr وأمان المؤشرات الفارغة» مجاني؟

نعم — نص درس «‏nullptr وأمان المؤشرات الفارغة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «‏nullptr وأمان المؤشرات الفارغة»؟

استخدم nullptr بدلًا من NULL أو 0، واحمِ البرنامج من إلغاء إشارة المؤشرات الفارغة. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «‏nullptr وأمان المؤشرات الفارغة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. المؤشرات الخام ومعامل أخذ العنوان
  2. إلغاء إشارة المؤشر وحساب المؤشرات
  3. ‏nullptr وأمان المؤشرات الفارغة
  4. متى تستخدم المؤشرات مقابل المراجع
← العودة إلى C++ Academy