У Cell появился get_cloned — значение с изменяемой ячейкой можно получить, даже если тип не копируется

04.10.2025

У изменяемой ячейки Cell появился метод get_cloned: он возвращает копию содержимого даже для типов, которые нельзя просто скопировать. Для этого введён отдельный типаж, задающий такое поведение.

Ограничение, которое снимается

У Cell есть два способа достать значение. Первый — get, но он требует, чтобы тип копировался. Второй — take, который забирает значение целиком и оставляет ячейку пустой.

Между ними была дыра: ячейка вроде бы не пустая, значение нужно, но ни один способ не подходит. Типичный случай — Cell<Vec<_>>, где вектор не копируется, а опустошать содержимое нельзя.

Новый метод возвращает копию, не опустошая ячейку.

Цена вопроса

Операция копирования содержимого требует, чтобы тип умел копировать себя — реализовать это должен автор типа. Для строк и векторов это означает настоящее клонирование, то есть выделение памяти.

То есть метод не бесплатный, но он убирает необходимость жертвовать либо содержимым, либо копированием.

Оригинал

add CloneFromCell and Cell::get_cloned

Упоминаний: 1 · Просмотров: 3