Мелкое Копирование и Перемещение в ржавчине - PullRequest
0 голосов
/ 12 ноября 2018

Возможно ли для ржавчины иметь мелкие копии, потому что может показаться, что ход заменяет мелкую копию?

1 Ответ

0 голосов
/ 12 ноября 2018

Вы должны различать в зависимости от базового типа.

Вы не можете сделать поверхностную копию struct Foo(String);, потому что два экземпляра Foo будут указывать на один и тот же String, что нарушит правило строгого алиасинга .

Однако, если у вас есть счетчик ссылок, например, struct Foo(Rc<String>); это возможно, потому что Rc не позволит вам совершать небезопасные действия, например, с изменяемой ссылкой, когда есть другие ссылки на String.

Также возможно, чтобы типы, которые реализуют [Clone], делали "мелкую" копию, поскольку Copy подразумевает, что тип может быть скопирован с использованием memcpy (например, u32 или *). 1021 *).

В чем разница между копированием и клоном? также очень стоит прочитать.


Итак, в общем случае нет: Исключениями являются структуры с подсчетом ссылок (Rc или Arc), Cloneables или ссылки (&T), потому что они не нарушают строгое правило алиасинга.

...