Yes, it's completely safe and its rust equivalent is
let x = vec![1, 2, 3];
process(std::mem::replace(&mut x, Vec::new()));
x.push(4);
https://doc.rust-lang.org/std/mem/fn.replace.html