Rust compiler considers all types movable and this is very common for rust programs. Any
fn(self) method relies on move,
fn new() -> Self moves result. As of , there is no way to opt out from move semantics.
In C++, move constructors need to be implemented separately and must be careful to leave the moved out object in the state valid to call
delete. In Rust, move is just a memcopy and is destructive. (Destructive/non-destructive move)