本文簡要介紹rust語言中 std::rc::Rc.make_mut
的用法。
用法
pub fn make_mut(this: &mut Rc<T>) -> &mut T
對給定的 Rc
進行可變引用。
如果有其他 Rc
指針指向同一分配,則 make_mut
會將 clone
內部值分配給新分配以確保唯一所有權。這也稱為clone-on-write。
但是,如果沒有其他 Rc
指針指向此分配,但有一些 Weak
指針,則 Weak
指針將被解除關聯,內部值將不會被克隆。
另請參閱 get_mut
,這將失敗而不是克隆內部值或解除關聯 Weak
指針。
例子
use std::rc::Rc;
let mut data = Rc::new(5);
*Rc::make_mut(&mut data) += 1; // Won't clone anything
let mut other_data = Rc::clone(&data); // Won't clone inner data
*Rc::make_mut(&mut data) += 1; // Clones inner data
*Rc::make_mut(&mut data) += 1; // Won't clone anything
*Rc::make_mut(&mut other_data) *= 2; // Won't clone anything
// Now `data` and `other_data` point to different allocations.
assert_eq!(*data, 8);
assert_eq!(*other_data, 12);
Weak
指針將被解除關聯:
use std::rc::Rc;
let mut data = Rc::new(75);
let weak = Rc::downgrade(&data);
assert!(75 == *data);
assert!(75 == *weak.upgrade().unwrap());
*Rc::make_mut(&mut data) += 1;
assert!(76 == *data);
assert!(weak.upgrade().is_none());
相關用法
- Rust Rc.make_mut用法及代碼示例
- Rust Rc.increment_strong_count用法及代碼示例
- Rust Rc.as_ptr用法及代碼示例
- Rust Rc.new_zeroed用法及代碼示例
- Rust Rc.new_cyclic用法及代碼示例
- Rust Rc.new_zeroed_slice用法及代碼示例
- Rust Rc.ptr_eq用法及代碼示例
- Rust Rc.weak_count用法及代碼示例
- Rust Rc.downgrade用法及代碼示例
- Rust Rc.try_unwrap用法及代碼示例
- Rust Rc.try_new_uninit用法及代碼示例
- Rust Rc.new_uninit用法及代碼示例
- Rust Rc.into_raw用法及代碼示例
- Rust Rc.downcast用法及代碼示例
- Rust Rc.try_new用法及代碼示例
- Rust Rc.new_uninit_slice用法及代碼示例
- Rust Rc.assume_init用法及代碼示例
- Rust Rc.get_mut_unchecked用法及代碼示例
- Rust Rc.from_raw用法及代碼示例
- Rust Rc.new用法及代碼示例
- Rust Rc.get_mut用法及代碼示例
- Rust Rc.decrement_strong_count用法及代碼示例
- Rust Rc.strong_count用法及代碼示例
- Rust Rc.try_new_zeroed用法及代碼示例
- Rust Result.unwrap_or_else用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::rc::Rc.make_mut。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。