No, they aren't. Since mutable references aren't copiable, writing for _ in self moves the reference and makes it unusable. In contrast, a reborrow only "freezes" it temporarily (for the duration of the iteration), so you'll be able to access it later.
Yeah. They're just using the IntoIterator implementation on &mut Vec<T> to remove all the items from the collection and let them be destroyed.
You could also implement it as while let Some(item) = self.pop() { drop(item); } or for item in self.drain(..) { drop(item); }[1], they're all different ways of achieving the same thing.
The drop() call wasn't really necessary here. I just added it to make it explicit that we're only removing items so they can be destroyed. âŠī¸