Comprehensive Rust(繁体中文) 202406with let: fn main() { let x: i32 = 10; println!("x: {x}"); // x = 20; // println!("x: {x}"); } • 取消註解 x = 20,證明變數預設為不可變動。如要允許變更,請加入 mut 關鍵字。 • 這裡的 i32 是變數型別。這是編譯器必須在編譯期間掌握的資訊,但透過型別推斷 (稍後會說明), 程式設計師在許多情況下都能省略其型別宣告。 • &mut self:使用不重複且可變動的參照,從呼叫端借用物件。之後可以再次使用該物件。 • self:取得物件擁有權,並將其移出呼叫端。方法會成為物件的擁有者。系統會在方法傳回時捨棄 物件 (取消分配),但如果其擁有權已明確傳送的情況例外。具備完整擁有權,不自動等同於具備可變 動性。 • mut self: same as above, but the method can mutate the free,或在其指向的記憶體釋出後取消參照指標。 • C++ 提供智慧指標 (unique_ptr、shared_ptr) 等工具,可利用有關呼叫解構函式的語言保證, 確保在函式傳回時釋出記憶體。但這些工具仍很容易遭到濫用,並且會產生類似 C 語言中的那些錯 誤。 • Java、Go 和 Python 會利用垃圾收集器來識別並捨棄無法再存取的記憶體。這能確保任何指標都 可以取消參照,進而消除 UAF (使用已釋放記憶體)0 码力 | 356 页 | 1.41 MB | 1 年前3
共 1 条
- 1













