Как уничтожает локальные переменные, когда блок выходит, обычно называемый в C ++?

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

  •  25-09-2019
  •  | 
  •  

Вопрос

C ++ Automagically вызывает разрушитель всех локальных переменных в блоке в обратном порядке, независимо от того, докладается ли блок обычно (управление падает) или выдается исключением.

Выглядит как термин стог разматывает относится только к последнему. Как прежний процесс (нормальный выход блока) под названием по уничтожению локальных переменных?

Это было полезно?

Решение

Объект автоматически разрушается, когда он «выходит из прицела». Это можно было упомянуть «автоматическое мельчайность хранения», но на самом деле относится к сборке мусора (есть несколько бумаг с этой фразой в их названии, которые используют срок для ознакомления сбора мусора). Когда он используется для обеспечения правильного сопряжения открытого / закрытия, блокировки / разблокировки или других форм приобретения ресурсов с их соответствующим выпуском, то он известен как рисунок дизайна Приобретение ресурсов является инициализация (Raii), что несколько иронично, учитывая, что основной аспект Raii не является инициализацией ресурсов или приобретения, а скорее его уничтожение.

Другие советы

Стог размотания происходит в обоих этих случаях, именно в том, что при нормальном исполнении стек размотана только в контексте метода вызова (или блока), когда метод выполнения возвращается (или блок заканчивается). Локальные переменные выделяются на стеке, поэтому они очищаются в обратном порядке распределения, и это этот процесс, который называется разматыванием. Это не отличается от обработки каких-либо других типов данных, которые вы храните в структуре LIFO - например, Undo, Redo.

Когда исключение выброшено, обработчик раскручивает стек через нулю или более методов, пока он не найдет тот, который может получить исключение, или до тех пор, пока он не достигнет верхней части стека, в какой точке будет вызываться необработанный обработчик исключения.

Похоже, что конвенция использует только термин стек, разматывающий в случае обработки исключений, но это тот же процесс, происходящий в каждом из этих случаев. Специфический случай, когда стек раскручивается из-за того, что выходит из-за выхода из-за выхода из-за того, что возвращается, не кажется никакой конвенции для именования того, что происходит, когда выходит на выделенный блок кода.

Локальная переменная разрушается, когда она выходит из охвата. Возможно, процесс называется «выходя из спецификации»?

Я не уверен, что есть имя для этого. Переменные стека есть так Автоматически не беспокоится о них, когда-либо, даже не достаточно, чтобы дать имя для этого автоматического процесса очистки.

Назовите это «Выходя из спецификации», я думаю.

Я всегда слышал, что это говорит о том, как «выходить из спецификации» или точнее « auto Переменная выходит из объема ".

Если то, что вы спрашиваете, это то, как вызов метода фактически реализован в машинном коде, я бы сказал, что это будет зависеть от используемой конвенции о вызове

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top