У Cell появился get_cloned — значение с изменяемой ячейкой можно получить, даже если тип не копируется
04.10.2025У изменяемой ячейки Cell появился метод get_cloned: он возвращает копию содержимого даже для типов, которые нельзя просто скопировать. Для этого введён отдельный типаж, задающий такое поведение.
Ограничение, которое снимается
У Cell есть два способа достать значение. Первый — get, но он требует, чтобы тип копировался. Второй — take, который забирает значение целиком и оставляет ячейку пустой.
Между ними была дыра: ячейка вроде бы не пустая, значение нужно, но ни один способ не подходит. Типичный случай — Cell<Vec<_>>, где вектор не копируется, а опустошать содержимое нельзя.
Новый метод возвращает копию, не опустошая ячейку.
Цена вопроса
Операция копирования содержимого требует, чтобы тип умел копировать себя — реализовать это должен автор типа. Для строк и векторов это означает настоящее клонирование, то есть выделение памяти.
То есть метод не бесплатный, но он убирает необходимость жертвовать либо содержимым, либо копированием.
Оригинал
add CloneFromCell and Cell::get_cloned
Упоминаний: 1 · Просмотров: 3