我有以下代码:
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 Drop
和List
的错误impl<'a> Drop for List<'a> {
fn drop(&mut self) {
}
}
。
为什么在添加borrowed value does not live long enough
之前和之后会有这样的区别?
答案 0 :(得分:2)
在构造
Cons(2, &Nil)
之前,Cons(1, _)
是否已丢弃?
如果将引用绑定到临时项,Rust会根据绑定需要延长临时项的生存期;有关详细信息,请参见this answer。
为什么在添加
impl Drop
之前和之后会有这样的区别?
请参见this comment。在您的示例中,临时项的延长生存期与x
的生存期匹配。如果包含引用的struct
没有实现Drop
,
允许参考,并且参考具有相同的使用寿命:不能不安全地使用参考。引入
Drop
暗示情况需要引用对象严格限制引用生存,以确保运行drop
方法的顺序明确。