本文简要介绍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 Arc.make_mut用法及代码示例
- Rust Arc.assume_init用法及代码示例
- Rust Arc.try_new用法及代码示例
- Rust Arc.increment_strong_count用法及代码示例
- Rust Arc.decrement_strong_count用法及代码示例
- Rust Arc.try_new_zeroed用法及代码示例
- Rust Arc.new_uninit_slice用法及代码示例
- Rust Arc.strong_count用法及代码示例
- Rust Arc.downcast用法及代码示例
- Rust Arc.try_unwrap用法及代码示例
- Rust Arc.get_mut_unchecked用法及代码示例
- Rust Arc.get_mut用法及代码示例
- Rust Arc.from_raw用法及代码示例
- Rust Arc.ptr_eq用法及代码示例
- Rust Arc.new用法及代码示例
- Rust Arc.weak_count用法及代码示例
- Rust Arc.new_cyclic用法及代码示例
- Rust Arc.new_zeroed用法及代码示例
- Rust Arc.into_raw用法及代码示例
- Rust Arc.as_ptr用法及代码示例
- Rust Arc.new_zeroed_slice用法及代码示例
- Rust Arc.downgrade用法及代码示例
- Rust Arc.try_new_uninit用法及代码示例
- Rust Arc.new_uninit用法及代码示例
- Rust Arc用法及代码示例
注:本文由纯净天空筛选整理自rust-lang.org大神的英文原创作品 std::sync::Arc.make_mut。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。