I am writing a toy BigInt class, and while I was implementing the Add trait, I noticed that the it takes ownership of both sides. What problem is that trying to solve, as opposed to borrowing them by reference? Since I am using a Vec as the underlying data structure, I cannot implement Copy, and that makes it somewhat cumbersome to use.
An example of a (minor) inconvenience that it causes:
let i = BigInt::new();
// - move occurs because `i` has type `BigInt`, which does not implement the `Copy` trait
let j = i + 16u32;
// --------- `i` moved due to usage in operator
let k = i + 32u32;
// ^ value used here after move
Again, I know I can just use .clone(), but I am curious about in which ways this is helping the programmer.