كيف يتم تدمير المتغيرات المحلية عند خروج كتلة عادة في C ++؟

StackOverflow https://stackoverflow.com/questions/2605352

  •  25-09-2019
  •  | 
  •  

سؤال

C ++ يستدعي تلقائيًا المدمرات لجميع المتغيرات المحلية في الكتلة بترتيب عكسي بغض النظر عما إذا كانت الكتلة قد تم الخروج منها بشكل طبيعي (تمر التحكم) أو يتم طرح استثناء.

يشبه المصطلح مكدس الاسترخاء ينطبق فقط على الأخير. كيف تسمى العملية السابقة (المخرج الطبيعي للكتلة) فيما يتعلق بتدمير المتغيرات المحلية؟

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

المحلول

يتم تدمير كائن تلقائيًا عندما "يخرج من النطاق". يمكن الإشارة إلى ذلك باسم "استصلاح التخزين التلقائي" ، ولكن هذا يشير فعليًا إلى جمع القمامة (هناك العديد من الأوراق التي تحمل هذه العبارة باسمها التي تستخدم المصطلح ليعني مجموعة القمامة). عند استخدامه لضمان الاقتران السليم للفتح/الإغلاق أو القفل/إلغاء القفل أو أشكال أخرى من اكتساب الموارد مع إصدارها المناسب ، يُعرف باسم نمط التصميم اكتساب الموارد هو التهيئة (RAII), ، وهو أمر مثير للسخرية إلى حد ما بالنظر إلى أن الجانب الرئيسي من RAII ليس هو تهيئة الموارد أو الاستحواذ عليها ، بل تدميرها.

نصائح أخرى

يحدث تفكيك المكدس في كلتا الحالتين ، إنه فقط تحت التنفيذ العادي ، يكون المكدس غير ملزم فقط بسياق طريقة الاتصال (أو الكتلة) عند إرجاع طريقة التنفيذ (أو يتم الخروج من الكتلة). يتم تخصيص المتغيرات المحلية على المكدس ، بحيث يتم تنظيفها بترتيب عكسي للتخصيص ، وهذه العملية تسمى الاسترخاء. لا يختلف الأمر عن معالجة أي نوع آخر من البيانات التي تقوم بتخزينها في بنية LIFO - على سبيل المثال ، التراجع ، Redo.

عندما يتم إلقاء استثناء ، سيقوم المعالج بالاسترخاء على المكدس من خلال طرق صفر أو أكثر حتى يجد طريقة يمكنها التقاط الاستثناء ، أو حتى تصل إلى الجزء العلوي من المكدس ، وعند هذه النقطة ، سيتم استدعاء معالج الاستثناء غير المعقول.

يبدو أن الاتفاقية هي استخدام مصطلح مصطلح فقط في حالة معالجة الاستثناء ، ولكنها نفس العملية التي تحدث في كل حالة من هذه الحالات. الحالة المحددة التي يتم فيها استدعاء المكدس بسبب طريقة الخروج من العودة ، لا يبدو أن هناك أي اتفاقية لتسمية ما يحدث عند خروج كتلة من الكود.

يتم تدمير المتغير المحلي عندما يخرج من النطاق. ربما تسمى العملية مثل "الخروج من النطاق"؟

لست متأكدًا من وجود اسم لهذا. متغيرات المكدس لذا تلقائيًا لا يقلقه أحد ، ولا يكفي ، ولا يكفي لإعطاء اسم لعملية التنظيف التلقائية هذه.

أسميها "الخروج من النطاق" ، كما أعتقد.

لطالما سمعت أنها تحدثت على أنها "الخروج من النطاق" أو بشكل أكثر دقة " auto متغير الخروج من النطاق ".

إذا كان ما تسأله هو كيف يتم تنفيذ استدعاء الطريقة فعليًا في رمز الجهاز ، أود أن أقول إنه سيعتمد على اتفاقية الاتصال المستخدمة

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