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