42. Как замыкание захватывает value type: копией или ссылкой?Теория

Дополнительные вопросы

1. Меняет ли список захвата способ захвата value type?

2. Когда компилятор копирует value type и не держит на него ссылку?

Темы

Без списка захвата замыкание держит саму переменную, а не снимок. Если замыкание переживает функцию, переменная уезжает в коробку в куче, и поздние записи в неё видны внутри замыкания. Копия появляется, когда значение записано в списке захвата: [point]. В замыкание попадает значение на момент создания, дальнейшие правки снаружи до него не доходят.

Дополнительные вопросы

1. Да. Список захвата как раз и выбирает копию. Без списка замыкание связано с переменной и видит её новые значения.

2. Когда значение указано в списке захвата. Тогда компилятор копирует его при создании замыкания и дальше хранит эту копию. Без списка у убегающего замыкания остаётся ссылка на коробку с переменной.