小编YuW*_*Wea的帖子

删除引用的对象后引用保持有效多长时间?

我正在阅读Common Rust Lifetime Misconceptions以了解生命周期是如何工作的,其中一个示例(下面发布)真的让我震惊,我无法说服自己为什么byte_1并且byte_2std::mem::drop(bytes);执行后仍然生活得很好。

从我的角度来看,在迭代器被删除后引用 whichbyte_1byte_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)

lifetime rust

3
推荐指数
1
解决办法
223
查看次数

标签 统计

lifetime ×1

rust ×1