When is a temporary destructed?

后端 未结 1 1143
时光说笑
时光说笑 2021-01-04 02:35

Up until now, I assumed that a temporary was destructed at the end of the evaluation of the statement that had spawned it.

However, it appears that there is an excep

1条回答
  •  离开以前
    2021-01-04 03:10

    Let's look at the second failing line first:

    let cmd = Cmd::new(&None);
    

    &None creates a temporary with a lifetime of the single line. Cmd::new returns a Cmd that has the same lifetime. Then we have attempt to store that temporary in a variable with let.

    The Rust reference states:

    When a temporary rvalue is being created that is assigned into a let declaration, however, the temporary is created with the lifetime of the enclosing block instead...

    It tries to increase the lifetime of the Cmd temporary, but that depends on the lifetime of the &None temporary, and since that temporary isn't actually stored in a let (the exception to the rule about temporaries lasting until the end of the statement), its lifetime is less than the lifetime of cmd and you get a lifetime error.

    The direct struct statements work, because the let lifetime applies to the struct and its members.

    The fact that it doesn't work for Some (an enum) seems like a bug to me (or at least a missing feature).

    0 讨论(0)
提交回复
热议问题