0Pricing
C++ Academy · درس

لماذا تستبدل المؤشرات الذكية new وdelete الخامّتين

افهم RAII ولماذا نادرًا ما تكون ملكية المؤشرات الخام صحيحة في C++ الحديثة.

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

new وdelete الخامان

إرث C: يخصص new T كائنًا من النوع T على الكومة، بينما يحرره delete. يجب مطابقة كل new مع delete واحد بالضبط، وإلا حدث تسرّب أو تعطل.

Widget* w = new Widget();
// ... use w ...
delete w;        // forget this and you leak

ما الذي يحدث بشكل خاطئ؟

أخطاء شائعة:

  • نسيان delete — تسرّب للذاكرة
  • استخدام delete مرتين — سلوك غير معرّف
  • إلقاء استثناء بين new وdelete — تسرّب
  • إرجاع مؤشر خام مع ملكية غير واضحة

RAII للإنقاذ

اكتساب المورد هو التهيئة: اربط عمر المورد بعمر كائن مكدس. ويحرر المدمّر المورد، حتى عند إلقاء استثناء.

فكرة المؤشر الذكي

المؤشر الذكي غلاف صغير يعتمد على RAII ويحيط بمؤشر خام. ويستدعي مدمّره delete، لذلك لن تنسوا تحرير الذاكرة.

المؤشرات الذكية الثلاثة

المؤشرات الذكية في المكتبة القياسية داخل <memory>:

  • std::unique_ptr<T> — ملكية حصرية
  • std::shared_ptr<T> — ملكية مشتركة مع عدّاد مراجع
  • std::weak_ptr<T> — مراقب غير مالك لـ shared_ptr

المؤشرات الذكية منخفضة التكلفة

لا يضيف unique_ptr أي تكلفة تقريبًا، فهو يساوي المؤشر الخام في الحجم والسرعة. أما shared_ptr فتترتب عليه تكلفة صغيرة لعدّاد مراجع ذري.

لا مزيد من delete اليدوي

مع المؤشرات الذكية، لن تكتبوا delete تقريبًا أبدًا. يتولى المدمّر الأمر.

#include <memory>
std::unique_ptr<Widget> w = std::make_unique<Widget>();
// no delete needed — when w goes out of scope, Widget is destroyed

المؤشرات الذكية والاستثناءات

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

الملكية ضمن النوع

يشفّر نوع المؤشر الذكي الآن معلومات الملكية. وتوضح قراءة توقيع الدالة من يملك الكائن.

// I take ownership
void consume(std::unique_ptr<Widget> w);

// I look but do not own
void inspect(const Widget& w);

لا تزال للمؤشرات الخام استخدامات

استخدموا المؤشرات الخام أو المراجع للوصول غير المالك. فهي توضح أنكم «تستعيرون ولا تملكون».

استبدال new بدوال make

فضّلوا std::make_unique في C++14 وstd::make_shared في C++11. فهما آمنان مع الاستثناءات وأكثر كفاءة قليلًا من استدعاء new مباشرة.

auto w = std::make_unique<Widget>(42);
auto s = std::make_shared<Resource>("file.txt");

تحقق سريع

ما السبب الرئيسي لاستخدام std::unique_ptr بدلًا من زوج new/delete الخام؟

مراجعة

استخدام new/delete الخام عرضة للأخطاء. وتغلف المؤشرات الذكية الكائنات المخصصة على الكومة في مقابض تعتمد على RAII وتحررها تلقائيًا. فضّلوا std::make_unique وstd::make_shared لتحقيق الأمان والأداء.

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

هل درس «لماذا تستبدل المؤشرات الذكية new وdelete الخامّتين» مجاني؟

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

ماذا ستتعلم في «لماذا تستبدل المؤشرات الذكية new وdelete الخامّتين»؟

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

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

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

كم من الوقت يستغرق درس «لماذا تستبدل المؤشرات الذكية new وdelete الخامّتين»؟

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

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

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

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

  1. لماذا تستبدل المؤشرات الذكية new وdelete الخامّتين
  2. ‏unique_ptr والملكية الحصرية
  3. ‏shared_ptr وweak_ptr والملكية المشتركة
  4. المحذوفات المخصّصة ودوال الإنشاء
← العودة إلى C++ Academy