我正在阅读Common Rust Lifetime Misconceptions以了解生命周期是如何工作的,其中一个示例(下面发布)真的让我震惊,我无法说服自己为什么byte_1并且byte_2在std::mem::drop(bytes);执行后仍然生活得很好。
从我的角度来看,在迭代器被删除后引用 whichbyte_1和byte_2hold 应该是无效的,bytes因为remainder数组也被删除了,编译器应该将drop操作视为错误,但实际上它通过编译器并且运行没有问题.. .
希望有人能给来自C++/C#的程序员一个合理的解释,谢谢!
struct ByteIter<'remainder> {
remainder: &'remainder [u8]
}
impl<'remainder> ByteIter<'remainder> {
fn next(&mut self) -> Option<&'remainder u8> {
if self.remainder.is_empty() {
None
} else {
let byte = &self.remainder[0];
self.remainder = &self.remainder[1..];
Some(byte)
}
}
}
fn main() {
let mut bytes = ByteIter { remainder: b"1123" };
let byte_1 = bytes.next();
let byte_2 …Run Code Online (Sandbox Code Playgroud)