Могу ли я переместить вектор внутрь структуры, не копируя ее полностью? - PullRequest
0 голосов
/ 19 сентября 2018

Запомните следующий код:

enum Store {
    Place { val: Vec<u8> },
}

fn subst(val: Vec<u8>, store: &mut Store) {
    *store = Store::Place { val }
}

Если я правильно понял, здесь, subst переместит val внутрь store, что приведет к его копированию.Есть ли способ сделать это, не копируя весь вектор?Под «копией» я имею в виду копию памяти.Насколько я понимаю, когда значение перемещается (например, vec при вызове subst(vec, ...), требуется полная копия, чтобы стереть данные из стека родительской функции и разместить в стеке вызываемой функции.

1 Ответ

0 голосов
/ 19 сентября 2018

Эта операция копирует только объект Vec, то есть указатель на его содержимое (но не на само содержимое), его емкость и длину, поэтому вам не следует беспокоиться о производительности:

fn move_vec(v: Vec<usize>) -> Vec<usize> {
    v
}

fn main() {
    let v1 = vec![1, 2, 3];
    println!("{:p}", &v1[1]);

    let v2 = move_vec(v1);
    println!("{:p}", &v2[1]); // the same location as above
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...