我如何找出命名生命周期的来源?
How do I figure out where a named lifetime comes from?
我正在阅读 the code of rust-sdl2 并且有这个 Texture
结构:
pub struct Texture<'r> {
raw: *mut sys::SDL_Texture,
_marker: PhantomData<&'r ()>,
}
我如何知道 'r
生命周期从何而来?
如果这样声明结构,那么 Rust 将能够自动确保内存安全:
pub struct Texture<'r> {
raw: &'r mut sys::SDL_Texture,
}
由于 SDL_Texture
是在 Rust 代码之外管理的,因此这是不可能的,因为需要原始指针。 Texture
的生命周期是为了在不安全的数据结构周围添加内存安全的抽象。
板条箱管理 Texture
的创建,并确保生命周期始终为 "correct"。生命周期是为了确保纹理不会超过内部 SDL_Texture
,它只被原始指针引用。
您不能自己创建 Texture
,除非使用不安全的函数。如果您要致电 TextureCreator::raw_create_texture
,您必须自己满足这一生的所有要求。而是safe方法create_texture
构造一个Texture
,同时保证内存安全
create_texture
的类型签名是:
pub fn create_texture<F>(
&self,
format: F,
access: TextureAccess,
width: u32,
height: u32,
) -> Result<Texture, TextureValueError>
where
F: Into<Option<PixelFormatEnum>>,
省略了一些生命周期。根据 Rust 的 lifetime elision rules,这可以更明确地写为:
pub fn create_texture<'r, F>(
&'r self,
format: F,
access: TextureAccess,
width: u32,
height: u32,
) -> Result<Texture<'r>, TextureValueError>
where
F: Into<Option<PixelFormatEnum>>,
生命周期注释表达了 self
和 Texture
之间的引用依赖关系。因此,返回的 Texture
不允许超过 TextureCreator
.
我正在阅读 the code of rust-sdl2 并且有这个 Texture
结构:
pub struct Texture<'r> {
raw: *mut sys::SDL_Texture,
_marker: PhantomData<&'r ()>,
}
我如何知道 'r
生命周期从何而来?
如果这样声明结构,那么 Rust 将能够自动确保内存安全:
pub struct Texture<'r> {
raw: &'r mut sys::SDL_Texture,
}
由于 SDL_Texture
是在 Rust 代码之外管理的,因此这是不可能的,因为需要原始指针。 Texture
的生命周期是为了在不安全的数据结构周围添加内存安全的抽象。
板条箱管理 Texture
的创建,并确保生命周期始终为 "correct"。生命周期是为了确保纹理不会超过内部 SDL_Texture
,它只被原始指针引用。
您不能自己创建 Texture
,除非使用不安全的函数。如果您要致电 TextureCreator::raw_create_texture
,您必须自己满足这一生的所有要求。而是safe方法create_texture
构造一个Texture
,同时保证内存安全
create_texture
的类型签名是:
pub fn create_texture<F>(
&self,
format: F,
access: TextureAccess,
width: u32,
height: u32,
) -> Result<Texture, TextureValueError>
where
F: Into<Option<PixelFormatEnum>>,
省略了一些生命周期。根据 Rust 的 lifetime elision rules,这可以更明确地写为:
pub fn create_texture<'r, F>(
&'r self,
format: F,
access: TextureAccess,
width: u32,
height: u32,
) -> Result<Texture<'r>, TextureValueError>
where
F: Into<Option<PixelFormatEnum>>,
生命周期注释表达了 self
和 Texture
之间的引用依赖关系。因此,返回的 Texture
不允许超过 TextureCreator
.