当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Rust Arc.make_mut用法及代码示例


本文简要介绍rust语言中 alloc::sync::Arc.make_mut 的用法。

用法

pub fn make_mut(this: &mut Self) -> &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大神的英文原创作品 alloc::sync::Arc.make_mut。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。