我在浏览某些库时,发现使用了包含幻影生命周期字段的结构,例如

struct S<'a> {
    s: i32,
    _lifetime: PhantomData<&'a ()> // NOTE: there's no generic type here!
}

我很想知道幻影生命的重要性-它为S提供了哪些优势,而如果没有它,将不可能或不方便处理?

最佳答案

这与对通用类型使用PhantomData相同:使结构像包含引用一样起作用,即使编译器在结构定义中看不到引用也是如此。

使用此参数的一个重要原因是在处理FFI类型时代表相关的生命周期,但是在任何时候都希望获得生命周期提供的保护但实际上没有可引用的地方时,这很有用。

也可以看看:

  • PhantomData in the Nomicon。本文讨论了使用PhantomData的各种常见模式。
  • Adding lifetime constraints to non-reference types
  • Restricting object lifetimes in Rust
  • How do I enforce parent-child struct lifetime?
  • How can I have a lifetime dependency without a reference?
  • 关于rust - 具有幻影生命周期的结构的意义是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51644968/

    10-10 18:34