البرمجة

Reassigning std::unique_ptr with make_unique – Memory Management

عند تنفيذ السطرين في الشيفرة الخاصة بك:

cpp
auto buff = std::make_unique<int[]>(128); buff = std::make_unique<int[]>(512);

ستحدث الخطوات التالية:

  1. الخط الأول auto buff = std::make_unique(128); ينشئ متغير buff من نوع unique_ptr ويخصص له مساحة في الذاكرة تكفي لتخزين 128 عنصر من نوع int. وعند نهاية نطاق هذا المتغير، سيتم تلقائياً القضاء على الذاكرة المخصصة باستخدام دالة delete[] لتجنب تسريب الذاكرة.

  2. الخط الثاني buff = std::make_unique(512); يخصص مساحة جديدة في الذاكرة بحجم 512 عنصر من نوع int، ثم يقوم بتعيين متغير buff ليشير إلى هذه المساحة الجديدة. في هذه الحالة، سيتم تلقائياً القضاء على الذاكرة المخصصة في الخط الأول باستخدام delete[]، وبالتالي لا توجد تسريب ذاكرة.

بالإجمال، لا توجد حاجة لاستخدام reset هنا، حيث أن العملية الأخيرة make_unique مع العملية التعيين = ستتعامل مع الذاكرة المخصصة بالشكل الصحيح تلقائياً.

المزيد من المعلومات

عند استخدام std::make_unique لإنشاء std::unique_ptr، يتم التعامل مع الإدارة الآمنة للذاكرة بشكل تلقائي. عند إعادة تعيين std::unique_ptr باستخدام operator=، سيتم تلقائيًا إلغاء تخصيص الذاكرة القديمة وتخصيص ذاكرة جديدة بالحجم الجديد. هذا يعني أنه في الحالة الخاصة التي ذكرتها، لا يوجد تسريب ذاكرة.

ومن الجدير بالذكر أنه في بعض الحالات قد تكون هناك أسباب لاستخدام reset بدلاً من operator=، مثل الحاجة إلى إعادة تعيين std::unique_ptr إلى قيمة خالية (مثل nullptr) دون إنشاء كائن جديد.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر