日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rust灯灭了怎么办_Rust Rc 方法整理

發布時間:2024/9/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rust灯灭了怎么办_Rust Rc 方法整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

std::rc::Rc 是單線程引用計數指針。'RC' 代表 'Reference Counted'。

翻閱 module-level-documentation 查看更多信息

Rc 的固有方法都是關聯函數,這意味在使用應該是用類似 Rc::get_mut(&mut value) 而不是 value.get_mut() 的方式調用。這可以避免與其包含的類型方法沖突。

方法

new

pub fn new(value: T) -> Rc

構造一個 Rc

例子

use std::rc::Rc;

let five = Rc::new(5);

pin

pub fn pin(value: T) -> Pin>

構建一個新的 Pin>。如果 T 沒有實現 Unpin,那么 value 將會固定在內存中不可移動。

try_unwrap

pub fn try_unwrap(this: Self) -> Result

如果 Rc 有且只有1個強引用,則返回包含的值,否則返回 Err。

不管 Rc 有多少弱引用,只要符合上述條件,該函數都將成功。

use std::rc::Rc;

fn main() {

let x = Rc::new(3);

assert_eq!(Rc::try_unwrap(x), Ok(3));

let x = Rc::new(4);

let _y = Rc::clone(&x); // 調用 clone 增強強引用

assert_eq!(*Rc::try_unwrap(x).unwrap_err(), 4); // Rc::try_unwrap(x) 返回 Err(4)

}

into_raw

pub fn into_raw(this: Self) -> *const T

消費 Rc, 返回被包裝的指針。

為了避免內存泄漏,被包裝的指針如果要被重新轉換為 Rc, 應該使用 Rc::from_raw

例子

use std::rc::Rc;

fn main() {

let x = Rc::new(4);

let x_ptr = Rc::into_raw(x); // x_ptr 為裸指針 0x142fdcde020

assert_eq!(unsafe { *x_ptr }, 4);

}

from_raw

pub unsafe fn from_raw(ptr: *const T) -> Self

從裸指針中構建一個 Rc。

裸指針必須是從 Rc::into_raw 中返回的裸指針。

這個函數是不安全的,因為不正確使用可能會導致內存問題。例如,在裸指針上二次釋放資源。

use std::rc::Rc;

let x = Rc::new(10);

let x_ptr = Rc::into_raw(x);

unsafe {

// 轉換成 Rc 避免內存泄漏

let x = Rc::from_raw(x_ptr);

assert_eq!(*x, 10);

// 再次調用 `Rc::from_row(x_ptr)` 會導致內存不安全

}

// `x` 的內存將會在離開作用域后釋放,所以 `x_ptr` 不是懸吊指針

downgrade

pub fn downgrade(this: &Self) -> Weak

創建一個被包裹值的弱引用指針

例子

use std::rc::Rc;

let five = Rc::new(5);

let weak_five = Rc::downgrade(&five);

weak_count

返回弱引用計數

例子

use std::rc::Rc;

let five = Rc::new(5);

let _weak_five = Rc::downgrade(&five);

assert_eq!(1, Rc::weak_cont(&five));

strong_count

返回強引用計數

例子

use std::rc::Rc;

let five = Rc::new(5);

let _also_five = Rc::clone(&five);

assert_eq!(2, Rc::strong_count(&five));

get_mut

如果沒有其他 Rc 或者 Weak 指針指向內部值,則返回內部值的可變引用,否則返回

None,因為改變共享值是不安全的。

另見 make_mut,這方法會在內部值處于共享狀態時克隆內部值。

例子

use std::rc::Rc;

let mut x = Rc::new(3);

*Rc::get_mut(&mut x).unwrap() = 4;

assert_eq!(*x, 4);

let _y = Rc::clone(&x);

assert!(Rc::get_mut(&mut x).is_none());

ptr_eq

判斷兩個指針是否指向同一個值

例子

use std::rc::Rc;

let five = Rc::new(5);

let same_five = Rc::clone(&five);

let other_five = Rc::new(5);

assert!(Rc::ptr_eq(&five, &same_file));

assert!(!Rc::ptr_eq(&five, &other_file));

make_mut

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

創建一個 Rc 的可變引用。如果 Rc 還有其他引用或弱引用,make_mut 將會克隆內部值以保證所有權的唯一性。這也被稱為寫時克隆。

另見 get_mut,這個方法會失敗而不是克隆

例子

use std::rc::Rc;

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

*Rc::make_mut(&mut data) += 1; // 不會克隆

let mut other_data = Rc::clone(&data); //此時還未復制

*Rc::make_mut(&mut data) += 1; // 復制內部數據

*Rc::make_mut(&mut data) += 1; // 復制后再次調用原指針將不會觸發克隆

*Rc::make_mut(&mut other_data) *= 2;

// 現在 `data` 和 `other_data` 指向不同值

assert_eq!(*data, 8);

assert_eq!(*other_data, 12);

downcast

pub fn downcast(self) -> Result, Rc>

嘗試將 Rc 降級為具體值

例子

use std::any::Any;

use std::rc::Rc;

fn print_if_string(value: Rc) {

if let Ok(string) = value.downcast::() {

println!("String ({}): {}", string.len(), string);

}

}

fn main() {

let my_string = "Hello World".to_string();

print_if_string(Rc::new(my_string));

print_if_string(Rc::new(0i8)); // 不會打印

}

總結

以上是生活随笔為你收集整理的rust灯灭了怎么办_Rust Rc 方法整理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www.婷婷 | 无码国产精品一区二区高潮 | 猫咪av在线| 中文字幕一区二区三区乱码不卡 | 手机看片日韩国产 | 簧片av| 黄色污污视频软件 | 国产夫妻自拍av | 外国黄色网 | 天堂在线中文网 | 国产一区高清 | 手机免费av片| 色妞网 | 性爱一级视频 | 欧美亚洲第一页 | 欧美人与性囗牲恔配 | 色婷婷久久综合 | 日本免费中文字幕 | www.插插插.com| 欧美一线天 | 在线播放ww| 欧美性xxxxx| 精品黑人一区二区三区在线观看 | 蜜桃成人免费视频 | 超碰免费公开在线 | 天天操狠狠操夜夜操 | 永久免费精品影视网站 | 高清一区二区三区四区 | 男女爱爱福利视频 | 永久免费未满视频 | 手机在线不卡av | 综合网天天 | 中文字幕在线免费看 | 国产探花在线精品一区二区 | 极品销魂美女少妇尤物 | 国产一区二区av在线 | 麻豆精品视频在线观看 | 国产中出| 国产又色又爽无遮挡免费 | 迈开腿让我尝尝你的小草莓 | 日本不卡不卡 | 激情综合视频 | 亚洲欧美日韩国产成人精品影院 | 久艹视频在线观看 | 欧美极品jizzhd欧美 | 国产精品久久久久久久久免费相片 | 日韩在线观看视频一区 | 天天射视频| 欧美日韩午夜精品 | 操www| 国模无码大尺度一区二区三区 | 亚洲第一色网 | 欧美一级网址 | 国产第十页 | 激情综合一区二区三区 | 久久精品国产99国产精品 | 国产综合精品视频 | 尤物在线免费观看 | 欧美激情视频在线观看 | 午夜不卡久久精品无码免费 | 免费在线观看a视频 | 欧美a网| 五月天婷婷爱 | 国产 日韩 一区 | 日韩欧美亚洲精品 | 91传媒在线播放 | 天堂无乱码| 国产香蕉视频在线 | 欧美黄色网络 | 国产免费自拍视频 | 免费国产视频在线观看 | 黄色va| 亚洲精品在线视频观看 | 日韩欧美中字 | 一区二区三区免费高清视频 | 日韩色黄大片 | www.一区二区三区 | 怨女1988国语版在线观看高清 | 欧美brazzers| 韩国三级做爰高潮 | 国产精品福利在线播放 | www.狠狠爱 | 久久手机视频 | 国产一区二区在线视频观看 | 欧美亚洲综合在线 | 国产熟妇搡bbbb搡bbbb | 国产精品无码天天爽视频 | 国产113页 | 欧美高清视频 | 电影《两个尼姑》免费播放 | 不卡一区二区在线视频 | 亚洲成人一区二区三区 | 亚洲乱乱 | 成年人免费看 | 乌克兰极品av女神 | 国产成人精品一区二区 | 欧美黑人多人双交 | 国产成人无码精品久久久久 | 欧美激情综合五月色丁香 |