سؤال

ما الفرق بين "جديد" و"مالوك" و"كالوك" وغيرهم في العائلة؟

(متى) هل أحتاج إلى أي شيء آخر غير "الجديد"؟

هل يتم تنفيذ واحد منهم باستخدام أي شيء آخر؟

هل كانت مفيدة؟

المحلول

new و delete هي ميزات محددة لـ C++.لم تكن موجودة في C. malloc هي طريقة المدرسة القديمة C لفعل الأشياء.في أغلب الأحيان، لن تحتاج إلى استخدامه في لغة C++.

  • malloc يخصص ذاكرة غير مهيأة.يجب تحرير الذاكرة المخصصة باستخدام free.
  • calloc يشبه malloc ولكن تهيئة الذاكرة المخصصة بثابت (0).يجب أن يتم تحريرها مع free.
  • new يقوم بتهيئة الذاكرة المخصصة عن طريق استدعاء المُنشئ (إذا كان كائنًا).الذاكرة المخصصة مع new ينبغي الافراج مع delete (والذي بدوره يدعو المدمر).لا يتطلب منك تحديد الحجم الذي تحتاجه يدويًا وإلقائه على النوع المناسب.وبالتالي، فهو أكثر حداثة وأقل عرضة للأخطاء.

نصائح أخرى

جديد/حذف + جديد[]/حذف[]:

  • الجديد/الحذف هو طريقة C++ لتخصيص الذاكرة وإلغاء تخصيص الذاكرة من الكومة.
  • new[] وdelete[] هي طريقة c++ لتخصيص صفائف الذاكرة المتجاورة.
  • يجب استخدامه لأنه أكثر أمانًا من نوع malloc
  • يجب استخدامه لأنه يستدعي المنشئ/المدمر
  • لا يمكن استخدامه بطريقة إعادة التخصيص، ولكن يمكن استخدام الموضع الجديد لإعادة استخدام نفس المخزن المؤقت للبيانات
  • لا يمكن تخصيص البيانات بأخرى جديدة أو تحريرها مجانًا، ولا يمكن حذفها[]

مالوك/مجاني + العائلة:

  • malloc/free/family هي طريقة C لتخصيص الذاكرة وتحريرها من الكومة.
  • calloc هو نفس malloc ولكنه يقوم أيضًا بتهيئة الذاكرة
  • ينبغي استخدامه إذا كنت قد تحتاج إلى إعادة تخصيص الذاكرة
  • لا يمكن تخصيص البيانات باستخدام malloc وتحريرها باستخدام الحذف أو الحذف[]

انظر أيضا بلدي الإجابة ذات الصلة هنا

  • new يخصص ويستدعي ctor (الترتيب غير محدد)، ويحذف dtor ويحرر الذاكرة المخصصة عن طريق استدعاء new
  • يخصص malloc فقط بعض الذاكرة، ويحذف الذاكرة المخصصة بواسطة malloc
  • جديد يمكن تنفيذه باستخدام malloc (غير مطلوب على الرغم من المعيار)
  • يقوم calloc بنفس الشيء مثل malloc ويقوم أيضًا بصفر الذاكرة المخصصة حديثًا

كما أشارت المشاركات الأخرى:يعد malloc/free جزءًا من C++ ليكون متوافقًا مع C.

انظر أيضا: ستروستروب:جديد مقابل مالوك

<ع> استخدام وسائل جديدة من شأنها أن يسمى الصانعين على الذاكرة المخصصة حديثا. إذا كان الشيء الذي خصص لايوجد الصانعين، جديدة غير متطابقة وظيفيا إلى malloc. وينبغي عادة أن تستخدم في pereference لذلك.

ومايو جديد أو قد لا يتم تنفيذها من حيث malloc - المعيار C ++ لا يتطلب أي نهج

.

وأنت لا تحتاج إلى أي شيء آخر غير جديدة. بل هو استبدال كامل للmalloc في C ++.

وأما بالنسبة للفرق: Malloc فقط يخصص الذاكرة. الذاكرة المخصصة الجديدة وتدعو المنشئات. مجانا بالمثل فقط تفرج عن الذاكرة. حذف البيانات في الذاكرة ويدعو المدمر.

وكلمة تحذير: لا تخلط التعابير اثنين. وكانت النتائج غير محددة.

والفرق الرئيسي بين الجديدة وmalloc يمكنني أن أذكر هو أنه لا يمكن تخصيص الذاكرة التي خصصتها جديدة باستخدام realloc. حتى إذا كنت تريد زيادة / تقليل حجم كتلة الذاكرة، كان عليك أن تخصيص كتلة جديدة ونسخ كل شيء قد انتهى.

وCalloc يسمح لك لتهيئة كتلة الذاكرة التي تخصص بينما malloc لا.

عندما انت جديد كائن، لا يتم تخصيص مساحة للكائن فحسب، بل يتم استدعاء مُنشئ الكائن.ولكن هذه هي الطريقة التي يتم بها تنفيذ C++، malloc هي الطريقة القديمة للنسخة ج لتخصيص الذاكرة. calloc بالضبط مثل malloc, ، باستثناء أنه يمسح الذاكرة إلى كافة البتات صفر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top