Rust对临时值的引用不报告错误

时间:2018-10-19 02:04:48

标签: rust

我有以下代码:

OrderPage

工作正常。我不明白为什么这段代码不会报告任何错误,在构造Site.objects.filter(all of the orderpage).distinct()之前class OrderPage(models.Model): description = models.CharField(max_length=255, blank=False) sites = models.ManyToManyField(Site) 是否被删除了?

此外,在为#[derive(Debug)] pub enum List<'a> { Nil, Cons(i32, &'a List<'a>) } { let x = Cons(1, &Cons(2, &Nil)); println!("{:?}", x); } 添加空的Cons(2, &Nil)之后,以上代码不再起作用:

Cons(1, _)

它报告impl DropList的错误impl<'a> Drop for List<'a> { fn drop(&mut self) { } }

为什么在添加borrowed value does not live long enough之前和之后会有这样的区别?

1 个答案:

答案 0 :(得分:2)

  

在构造Cons(2, &Nil)之前,Cons(1, _)是否已丢弃?

如果将引用绑定到临时项,Rust会根据绑定需要延长临时项的生存期;有关详细信息,请参见this answer

  

为什么在添加impl Drop之前和之后会有这样的区别?

请参见this comment。在您的示例中,临时项的延长生存期与x的生存期匹配。如果包含引用的struct没有实现Drop

  

允许参考,并且参考具有相同的使用寿命:不能不安全地使用参考。引入Drop暗示情况需要引用对象严格限制引用生存,以确保运行drop方法的顺序明确。