Generics 为什么这一辈子都没有;过期;?
对于下面的块,生存期Generics 为什么这一辈子都没有;过期;?,generics,rust,lifetime,Generics,Rust,Lifetime,对于下面的块,生存期'b和'c何时结束 使用core::ops::Deref; #[导出(调试)] 结构A{ 儿童:和, 儿童:和 } 暗示{ pub fn新包装(b_值:&'b T,c_值:&'c T)->A{ A{ child_b:b_值, child_c:c_值 } } } fn不放弃借款(ty:&T){ *泰; } fn滴(ty:T){} fn main(){ 让b:String=“wonderful”。into(); 让c:String=“lifety”。into(); 设a=a::新
'b
和'c
何时结束
使用core::ops::Deref;
#[导出(调试)]
结构A{
儿童:和,
儿童:和
}
暗示{
pub fn新包装(b_值:&'b T,c_值:&'c T)->A{
A{
child_b:b_值,
child_c:c_值
}
}
}
fn不放弃借款(ty:&T){
*泰;
}
fn滴(ty:T){}
fn main(){
让b:String=“wonderful”。into();
让c:String=“lifety”。into();
设a=a::新的包装器(&b,&c);
println!(“你好,这个{:?}世界”,&a);
不放弃借款(a.child);
下降(a.child_c);
println!(“你好,这个{:?}世界”,&a);
}
由于a.child\u c
具有类型&String
,因此中的ty
参数
doesn\u drop\u borrow(&a.child\u c)
的类型为和&String
,并且
*ty
具有类型&String
,因此原始的字符串
(c
)不会
被抛弃
我不知道到底是什么激发了你的问题,但我猜
事实上,在调用drop(a.child\u c)
之后,您仍然可以使用a
。
此函数的名称具有误导性,因为此处的ty
参数
具有类型和字符串(与a.child\u c
相同)。
因此,ty
参数显示为原始参数的新的不可变借用
c
,然后立即删除,但不会删除原始的c
。
删除引用时,引用的值不会被删除
这两个函数都没有实际移动原始的字符串
,
他们只处理参考资料
所以b
和c
在这里一直持续到main()
的末尾,a
也值得一提的是,&T
是Copy
,所以drop(a.child\u c)
会删除a.child\u c
(也就是说,a.child\u c
的副本。@FrancisGagné:甚至还有一个。好吧,在这种情况下,我想是这样的。