當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust Arc.make_mut用法及代碼示例


本文簡要介紹rust語言中 std::sync::Arc.make_mut 的用法。

用法

pub fn make_mut(this: &mut Arc<T>) -> &mut T

對給定的 Arc 進行可變引用。

如果有其他 Arc 指針指向同一分配,則 make_mut 會將 clone 內部值分配給新分配以確保唯一所有權。這也稱為clone-on-write。

但是,如果沒有其他 Arc 指針指向此分配,但有一些 Weak 指針,則 Weak 指針將被解除關聯,內部值將不會被克隆。

另請參閱 get_mut ,這將失敗而不是克隆內部值或解除關聯 Weak 指針。

例子

use std::sync::Arc;

let mut data = Arc::new(5);

*Arc::make_mut(&mut data) += 1;         // Won't clone anything
let mut other_data = Arc::clone(&data); // Won't clone inner data
*Arc::make_mut(&mut data) += 1;         // Clones inner data
*Arc::make_mut(&mut data) += 1;         // Won't clone anything
*Arc::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::sync::Arc;

let mut data = Arc::new(75);
let weak = Arc::downgrade(&data);

assert!(75 == *data);
assert!(75 == *weak.upgrade().unwrap());

*Arc::make_mut(&mut data) += 1;

assert!(76 == *data);
assert!(weak.upgrade().is_none());

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::sync::Arc.make_mut。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。