繁体   English   中英

如果我为结构编写自定义放置实现,是否需要指定“放置(项目)”? Rust

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM