- Reference实际只是一个地址
- 引用不影响所引用的生命周期
- References must never outlive their referents. 引用生命周期不得超过所引用值.
Shared Reference
- 可以有多个共享引用
- 一旦有shared reference, 被引用的Owner变成只读, 不能修改和move.
- shared reference可以 Copy
Mutable Reference
- 一旦有可变引用, 除了可变引用衍生出的引用, 不能有其它任何形式的引用访问和修改, 直到可变引用销毁
- mutable reference不可 Copy
引用规则判断标准
- 引用类型变量不得超过Owner生存期——引用变量生命周期的上限
- 存储了引用的变量其引用的Owner生命周期必须至少涵盖到变量的生命周期——Owner生命周期的下限
上限至少包含下限才符合规则! 例如:
1 | { |
x
的生命周期如下:
而变量 r
的生命周期如下:
上限未包含下限, 因此不满足.
把r
放入内部, OK
Static引用
所有静态的数据都必须被初始化
可变的静态引用(Mutable statics)默认都非线程安全, 只能在
unsafe block
内访问可变的静态引用1
2
3
4
5
6
7static mut STASH: &i32 = &10;
fn f(p: &'static i32) {
unsafe {
STASH = p;
}
}
包含引用的复合类型
包含引用的复合类型(如
struct
)必须声明其生命周期1
2
3
4
5
6
7struct T<'a> {
s: S<'a>
}
// or
struct T {
s: S<'static>
}self
的方法如果返回引用, 默认与self
是相同的生命周期
All images are copyrighted by original authors Jim Blandy & Jason Orendorff who wrote in the book Programming Rust.