"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > إنشاء مثيل كائن C++: المكدس مقابل الكومة: "جديد" أم "جديد"؟

إنشاء مثيل كائن C++: المكدس مقابل الكومة: "جديد" أم "جديد"؟

تم النشر بتاريخ 2024-12-21
تصفح:574

C   Object Instantiation:  Stack vs. Heap: `new` or Not `new`?

إنشاء كائنات: مع أو بدون جديد

عند إنشاء كائنات في لغة C، يمكن للمبرمجين استخدام إما عامل التشغيل "الجديد" أو إنشاء مثيل لهم مباشرة بدونها. في حين أن كلا النهجين ينشئان كائنات، إلا أنهما يختلفان في عدة جوانب أساسية.

يؤدي إنشاء كائن بدون "جديد" إلى الاحتفاظ مباشرة بالذاكرة له في النطاق الحالي. يتم ذلك عادةً على المكدس وينتج عنه كائن ذو عمر افتراضي تلقائي. يتم إنشاء الكائن وتدميره تلقائيًا ضمن النطاق الذي تم تعريفه.

على سبيل المثال:

الوقت t(12, 0, 0); // t هو كائن زمني
Time t(12, 0, 0); // t is a Time object
في الكود أعلاه، يتم إنشاء كائن "الوقت" "t" على المكدس ويرتبط عمره بالنطاق الحالي.

مع جديد

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

على سبيل المثال:

Time* t = new Time(12, 0, 0); // t هو مؤشر لكائن وقت مخصص ديناميكيًا
Time* t = new Time(12, 0, 0); // t is a pointer to a dynamically allocated Time object
هنا، يتم تعيين عنوان الكومة للمؤشر "t" لكائن "Time" الذي تم إنشاؤه حديثًا. عمر الكائن مستقل عن النطاق ويستمر حتى يتم استخدام عامل "الحذف" لتحرير ذاكرته.

الاختلافات الرئيسية

    تخصيص الذاكرة :
  • الكائنات التي تم إنشاؤها بدون "جديد" تخصص ذاكرة على المكدس، بينما "جديد" يخصص ذاكرة على المكدس الكومة.
  • مدة الحياة:
  • الكائنات التي تم إنشاؤها بدون "جديد" لها عمر تلقائي، بينما الكائنات التي تم إنشاؤها باستخدام "جديد" لها عمر ديناميكي ويجب حذفها يدويًا.
  • من المهم ملاحظة أن هذه الاختلافات خاصة بالتنفيذ، حيث أن معيار C لا يحدد بشكل صريح سلوك المكدس والكومة. ومع ذلك، في معظم التطبيقات العملية، يتم استخدام ذاكرة المكدس للكائنات التلقائية، ويتم استخدام ذاكرة الكومة للكائنات الديناميكية.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3