В каком порядке Rust уничтожает несколько локальных переменных, если они находятся в одной области видимости?
База Hintsage
Владение и заимствование
Ownership, borrowing, moves и правила безопасной памяти.
Практика
Вопросы: Владение и заимствование
В чём принципиальная разница между клонированием и перемещением String с точки зрения владения и выделенной памяти?
При попытке создать изменяемое заимствование, какую роль играет изменяемость переменной-владельца?
Как выбор получателя метода по владению или по заимствованию определяет, останется ли объект доступен после вызова?
При затенении имени вместо присваивания, что происходит с прежним владельцем значения?
Что означает ограничение T: Sync и почему оно связано с безопасной передачей &T между потоками?
Как lifetime-параметр структуры ограничивает срок жизни экземпляра, содержащего заимствованное поле?
Что происходит с владением String, когда в функцию, ожидающую &str, передают ссылку на эту строку?
Почему обращение к элементу коллекции по индексу не позволяет переместить из неё значение, не реализующее Copy?
Почему неизменяемую ссылку можно копировать, а изменяемую — нельзя?
Разберите ограничение: почему Rust запрещает переместить значение, не реализующее Copy, через неизменяемую ссылку, даже если исходный владелец больше не будет использован?
При временном чтении через изменяемую ссылку, что происходит с возможностью последующей записи через исходную ссылку?
Почему Rust запрещает перемещать отдельное поле из структуры, реализующей Drop?
Чем присваивание значения типа, реализующего Copy, отличается от обычного перемещения?
Разберите, какую операцию предотвращает Pin<Box<T>> для типа без Unpin и зачем это нужно. Рассмотрите код:
use std::marker::PhantomPinned;
struct Task {
value: String,
_pin: PhantomPinned,
}
fn main() {
let pinned = Box::pin(Task {
value: String::from("ready"),
_pin: PhantomPinned,
});
// let moved: Task = *pinned;
println!("{}", pinned.value);
}
Каким образом Rust предотвращает двойное освобождение значения после его перемещения в другую переменную?
Какая проверка позволяет Rust безопасно передать владение значением в другой поток?
Что именно перестаёт гарантировать Rust после преобразования ссылки в сырой указатель? Рассмотрите фрагмент:
fn main() {
let value = 42;
let ptr: *const i32 = &value;
unsafe {
println!("{}", *ptr);
}
}
В сопоставлении с образцом значение типа String оказывается недоступным после ветки: какой механизм приводит к этому и как взять данные без перемещения?
Как Cow откладывает клонирование заимствованных данных до первой мутации?
Показано 1–20 из 50