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é:甚至还有一个。好吧,在这种情况下,我想是这样的。