Некопируемые типы ~Copyable в Swift
Вопрос
Что даёт объявление struct FileDescriptor: ~Copyable (Swift 5.9+)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Значение нельзя копировать: у него один владелец, передача его забираетправильный ответ
- Структура становится ссылочным типом с подсчётом ссылок, как класс
- Компилятор копирует значение лениво, по схеме copy-on-write
- Тип нельзя передавать в функции и хранить в свойствах других типов
Разбор
Noncopyable-типы (SE-0390) выражают уникальное владение ресурсом: дескриптором файла, блокировкой, буфером. Копия запрещена компилятором, передача в функцию идёт как borrowing (временный доступ) или consuming (забрать владение). Таким структурам разрешён deinit, и он гарантированно вызовется один раз. Подсчёта ссылок нет, это по-прежнему тип значения. Передавать их можно, но с явной семантикой владения.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Зачем нужен mutating в структуре
Следующий вопрос
Что выведет Swift: массив объектов после копирования
Ещё по теме «Типы значений и ссылочные»
- Copy-on-write у Array: когда копируется буфер
- Модификаторы borrowing и consuming
- Как сделать свой copy-on-write
- Existential container: как хранится any Protocol
- Типы значений и ссылочные типы в Swift
- Оператор === в Swift
- Зачем indirect у enum
- Задача на Swift: стек отмены для текстового поля