До сих пор я предполагал, что в конце оценки заявления, породившего его, было уничтожено временное место.
Однако, похоже, что существует исключение при использовании временного для инициализации поля struct
.
PeterHall предоставил простой пример кода, иллюстрирующий разницу в комментарии к его ответ, который я упростил :
struct Wrapper<'a> {
cmd: &'a Cmd<'a>,
}
struct Cmd<'a> {
args: &'a Option<String>,
}
impl <'a> Cmd<'a> {
fn new(args: &'a Option<String>) -> Cmd<'a> {
Cmd {
args: args,
}
}
}
pub fn main() {
// OK
let cmd = Cmd {
args: &None,
};
// OK
let cmd = Wrapper {
cmd: &Cmd {
args: &None,
}
};
// Lifetime error
let cmd = Some(Cmd {
args: &None,
});
// Lifetime error
let cmd = Cmd::new(&None);
}
Итак, что такое точное правило для временного разрушения?