Это упражнение из Шорохи после исправления дает:
fn move_semantics4() {
let mut x = Vec::new();
let y = &mut x;
y.push(42);
let z = &mut x;
z.push(13);
assert_eq!(x, [42, 13]);
}
Если я проведу это через Aquascope, в средстве проверки займов выдаст:
Я не понимаю, почему x
теряет право собственности на L3 и L5. AFAIK, изменяемая ссылка, присвоенная y
и z
, подразумевает:
x
больше нельзя создать ссылку (одновременно может быть только одна изменяемая ссылка).y
и z
(последовательно) читать и писать в векторе.Но не теряя права собственности.
По моему мнению, визуальное представление подтверждает сохранение права собственности x
:
Может ли кто-нибудь уточнить это?
Обновлено: для полноты картины я создал еще один фрагмент с ссылкой на перемещение и изменяемую ссылку, и при выполнении перемещения появляется специальный символ (жирная стрелка):
Я посетил этот сайт Aquascope и не смог найти на нем никакого ключа, определяющего, что означает O (или W и R).
На веб-сайте Aquascope вы можете навести курсор на пиктограммы, такие как +R
/-R
/+W
/-W
/+O
/-O
, и стрелки, такие как →
, и появится всплывающая подсказка о значении (то же самое можно просмотреть и в необработанном HTML-дереве).
В частности, это показывает:
+O
Путь не имел собственных разрешений до предыдущей строки и получил их после этой строки"
-O
Путь имел собственные разрешения до предыдущей строки и потерял их после этой строки.
→
Путь позаимствован здесь
Так ведь в строке 3 действие на x → -O
можно понимать как x
здесь заимствовано, и «потеря собственного разрешения» не означает, что x
больше не владеет объектом, это означает, что он больше не может передать право собственности кому-либо , поскольку существует заимствование. Между тем, y → +O
означает, что y
объект создается, но это ссылка, и он может передавать право собственности на ссылку, а не на объект, на который ссылается.
В строке 4 срок жизни y
заканчивается, он уничтожается, таким образом x → +O
получил возможность передать право собственности (хотя он всегда сохранял право собственности)
Нет.
x
продолжает оставаться владельцемVec
на протяжении всего фрагмента.