[英]Do I need to specify 'drop(item)' if i write a custom drop implementation for a struct? Rust
我目前在 rust 与 OpenGL 合作。
我想将 VAO 和纹理之类的对象创建到结构中
现在,我编写了一个自定义放置实现,当对象生命周期结束时调用类似glDeleteTexture
的东西,以便它清除 VRAM 中的 memory。
如果我不为所有属性专门调用drop(struct_attribute)
,object 的实际数据是否仍保留在 RAM 中
我期待 rust 在每个属性上自动调用 drop 但我只是想确保我不会浪费我的时间或 memory 如果我错了。
当你实现 drop 时,你不需要手动删除其他成员,你也不可能这样做。
举个例子:
struct A {
handle: i32,
a: String,
// ...
}
impl Drop for A {
fn drop(&mut self) {
// Do something with `handle`
// ...
// `a` will be dropped *after* this function returns automatically
}
}
Drop::drop
收到一个&mut self
,这使得你不能(没有不安全或替换原始值)删除self.a
。 如果您确实以某种方式丢弃了它,rust 将在drop
返回后继续丢弃它,从而导致双重释放。
Drop
不用于删除类型,尽管它的名称。 它更类似于在类型被删除之前运行代码的终结器。
drop
被简单地定义为fn drop<T>(_: T) {}
,它没有做任何特别的事情。 Rust 自动为您拾取所有值:几乎每个值都被 Rust 丢弃(一些例外包括程序发散时,但不要担心)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.