Rc+RefCell解釋

ImreW發表於2024-03-11

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變數才能被修改(外部可變性)的限制。