簡體   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