本文簡要介紹rust語言中 alloc::sync::Weak.from_raw
的用法。
用法
pub unsafe fn from_raw(ptr: *const T) -> Self
將先前由 into_raw
創建的原始指針轉換回 Weak<T>
。
這可用於安全地獲得強引用(通過稍後調用 upgrade
)或通過刪除 Weak<T>
來釋放弱計數。
它擁有一個弱引用的所有權(由 new
創建的指針除外,因為它們不擁有任何東西;該方法仍然適用於它們)。
安全性
指針必須源自 into_raw
,並且必須仍然擁有其潛在的弱引用。
在調用它時允許強計數為 0。然而,這需要一個當前表示為原始指針的弱引用的所有權(此操作不會修改弱計數),因此它必須與之前對 into_raw
的調用配對。
例子
use std::sync::{Arc, Weak};
let strong = Arc::new("hello".to_owned());
let raw_1 = Arc::downgrade(&strong).into_raw();
let raw_2 = Arc::downgrade(&strong).into_raw();
assert_eq!(2, Arc::weak_count(&strong));
assert_eq!("hello", &*unsafe { Weak::from_raw(raw_1) }.upgrade().unwrap());
assert_eq!(1, Arc::weak_count(&strong));
drop(strong);
// Decrement the last weak count.
assert!(unsafe { Weak::from_raw(raw_2) }.upgrade().is_none());
相關用法
- Rust Weak.new用法及代碼示例
- Rust Weak.into_raw用法及代碼示例
- Rust Weak.upgrade用法及代碼示例
- Rust Weak.as_ptr用法及代碼示例
- Rust Weak.ptr_eq用法及代碼示例
- Rust Wrapping.is_negative用法及代碼示例
- Rust Wrapping.from_le用法及代碼示例
- Rust Wrapping.reverse_bits用法及代碼示例
- Rust Wrapping.to_be用法及代碼示例
- Rust Wrapping.next_power_of_two用法及代碼示例
- Rust Write.write_all用法及代碼示例
- Rust Write.write_str用法及代碼示例
- Rust Windows用法及代碼示例
- Rust Write用法及代碼示例
- Rust Write.write_vectored用法及代碼示例
- Rust Wrapping.is_power_of_two用法及代碼示例
- Rust Wrapping.abs用法及代碼示例
- Rust WriterPanicked用法及代碼示例
- Rust Write.by_ref用法及代碼示例
- Rust Wrapping.rotate_right用法及代碼示例
- Rust Wake用法及代碼示例
- Rust Wrapping.leading_zeros用法及代碼示例
- Rust Write.flush用法及代碼示例
- Rust Wrapping.signum用法及代碼示例
- Rust Write.write_all_vectored用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 alloc::sync::Weak.from_raw。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。