1 Rc(Reference Counted)
Rc(Reference Counted):是Rust標準庫中,用於處理引用計數的智慧指標。用來突破單一所有權的限制。其基本操作是透過clone()
增加引用計數。
Reference Counted // Rc會把對應的資料結構建立在堆上 // 堆上的資料才適合被用來在多個函式呼叫棧幀中共享 let i1 = Rc::new(1); // 複製引用計數 let i2 = i1.clone(); let i3 = i1.clone(); // 現在引用計數值為3 println!("{}", Rc::strong_count(&i1)); //3 println!("{}", Rc::strong_count(&i2)); //3 println!("{}", Rc::strong_count(&i3)); //3
2 內外可變性
2.1 外部可變性
簡單來說,mut
關鍵字註明的可修改性就是外部可變性。
Rust中提供了兩種引用/借用型別:
&
:只讀引用,只讀引用不允許修改被引用的物件。&mut
:可變引用,可變引用才有修改許可權。
在編譯階段,Rust會檢查,同一作用域內,對於某一個物件的引用,只允許存在兩種情況:
要麼只有一個活躍的可變引用,要麼同時存在多個只讀引用。
2.2 RefCell和內部可變性
RefCell,提供內部包裝型別的內部可變性,用來突破mut變數才能被修改(外部可變性)的限制。