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


Rust Weak.from_raw用法及代碼示例


本文簡要介紹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-lang.org大神的英文原創作品 alloc::sync::Weak.from_raw。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。