Выбор ответа Senior Типы значений и ссылочные обновлено

Некопируемые типы ~Copyable в Swift

Вопрос

Что даёт объявление struct FileDescriptor: ~Copyable (Swift 5.9+)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Значение нельзя копировать: у него один владелец, передача его забирает. Noncopyable-типы (SE-0390) выражают уникальное владение ресурсом: дескриптором файла, блокировкой, буфером.

Варианты ответа

  1. Значение нельзя копировать: у него один владелец, передача его забираетправильный ответ
  2. Структура становится ссылочным типом с подсчётом ссылок, как класс
  3. Компилятор копирует значение лениво, по схеме copy-on-write
  4. Тип нельзя передавать в функции и хранить в свойствах других типов

Разбор

Noncopyable-типы (SE-0390) выражают уникальное владение ресурсом: дескриптором файла, блокировкой, буфером. Копия запрещена компилятором, передача в функцию идёт как borrowing (временный доступ) или consuming (забрать владение). Таким структурам разрешён deinit, и он гарантированно вызовется один раз. Подсчёта ссылок нет, это по-прежнему тип значения. Передавать их можно, но с явной семантикой владения.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.