国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

rust 智能指針

這篇具有很好參考價值的文章主要介紹了rust 智能指針。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Rust中基本數(shù)據(jù)類型(如整數(shù)、浮點(diǎn)數(shù)、布爾值等)通常存儲在棧上。而動態(tài)分配的數(shù)據(jù),如Box<T>Vec<T>等,存儲在堆上。

Box 智能指針

Rust 中 Box 是一種智能指針類型,通常用于將值放置在堆上而不是棧上。在 Rust 中,由于所有值的默認(rèn)生命周期都在當(dāng)前作用域結(jié)束時結(jié)束,因此在情況需要延長對象的生命周期時,可以使用 Box 來將對象存儲在堆上,以便在它們的所有權(quán)結(jié)束之前對它們進(jìn)行訪問。

struct User {
    name: String,
    age: i32,
}

fn main() {
    // 創(chuàng)建一個 User 對象,并將其存儲在 Box 智能指針中
    let user = Box::new(User {
        name: "test".to_string(),
        age: 18,
    });

    // 通過解引用運(yùn)算符來訪問結(jié)構(gòu)體對象的字段
    println!("name = {}", (*user).name);
    println!("age = {}", (*user).age);

    // 創(chuàng)建一個字符串對象,并將其存儲在 Box 智能指針中
    let str = Box::new(String::from("Hello, World!"));

    // 通過解引用運(yùn)算符來訪問字符串對象中的字符
    println!("Character at index 7 = {}", (*str).chars().nth(7).unwrap());
}

Rc 智能指針

Rust 中的 Rc 類型是一個引用計(jì)數(shù)智能指針,它允許多個所有者共享相同的數(shù)據(jù)。每次創(chuàng)建一個 Rc 實(shí)例時,都會增加一個引用計(jì)數(shù),并在所有者之間共享這個計(jì)數(shù)。當(dāng)沒有所有者時,引用計(jì)數(shù)將遞減,一旦它達(dá)到零,數(shù)據(jù)將被釋放。

use std::rc::Rc;

fn main() {
    let str = Rc::new("Hello, world!");

    // 獲取引用計(jì)數(shù)為 1
    println!("strong_count: {}", Rc::strong_count(&str));

    // 創(chuàng)建一個新的所有者
    let str2 = Rc::clone(&str);

    // 獲取引用計(jì)數(shù)為 2
    println!("strong_count: {}", Rc::strong_count(&str));
    println!("strong_count: {}", Rc::strong_count(&str2));
}

Arc 智能指針

Rust 中的 Arc 類型是一個原子引用計(jì)數(shù),在多線程環(huán)境中,Rc 無法安全地使用,因?yàn)樗囊糜?jì)數(shù)無法保證并發(fā)安全。Arc 提供了高效而安全的共享所有權(quán)機(jī)制,通過使用原子變量來保證線程安全。Arc 是一種非常有用的智能指針。它通過使用 clone 方法并通過原子方式增加引用計(jì)數(shù)來創(chuàng)建新的所有權(quán)證書,從而允許在多個線程中共享數(shù)據(jù)。

use std::sync::Arc;
use std::thread;

fn main() {
    let data = Arc::new(vec![1, 2, 3, 4, 5]);
    let handle = thread::spawn(move || {
        //克隆了一份到線程內(nèi)部
        let local_data = data.clone();
        println!("local_data: {:?}", local_data);
    });

    handle.join().unwrap();
}

Cell 智能指針

Rust 中的 Cell 類型是一個原子可變?nèi)萜?,它允許我們持有一個不可變對象,并提供了對其中一個字段進(jìn)行可變訪問的能力。它常被用于資源共享或狀態(tài)修改的小場景中。

use std::cell::Cell;

struct Point {
    x: i32,
    y: Cell<i32>,
}

fn main() {
    let point = Point { x: 5, y: Cell::new(10) };
    let old_y = point.y.get();
    point.y.set(20);
    let new_y = point.y.get();
    println!("Old y was {}, new y is {}", old_y, new_y);
}

RefCell 智能指針

Rust 中的 RefCell 類型是一個智能指針,它提供了內(nèi)部可變性(mutability),允許我們在不可變引用之間修改值。但是,與 Cell 不同的是,RefCell 會在運(yùn)行時進(jìn)行借用檢查來保證數(shù)據(jù)的安全性。

主要在以下兩種情況下使用 RefCell:

  1. 當(dāng)你需要在不可變引用之間修改值時;

  2. 當(dāng)你不能使用 Rc,但仍需要共享所有權(quán)的時候。

use std::cell::RefCell;

fn main() {
    //RefCell提供內(nèi)部可變性
    let cell = RefCell::new(10);
    {
        // 運(yùn)行時會檢查借用規(guī)則,所以這里必須加大括號
        // 將可寫借用跟后面的只讀借用隔離開來
        let mut mut_ref = cell.borrow_mut();
        *mut_ref += 1;
    }
    println!("{}", cell.borrow()); //11
}

RefCell相比Cell,內(nèi)部維護(hù)了一個包裝對象的引用計(jì)數(shù),當(dāng)通過 RefCell.borrow 獲取一個共享引用時,內(nèi)部引用計(jì)數(shù)加一,當(dāng)獲取的引用離開作用域時,內(nèi)部引用計(jì)數(shù)減一,當(dāng)RefCell.borrow_mut 獲取一個可變引用時,首先檢測引用計(jì)數(shù)是否為 0,如果為 0,正常返回,如果不為 0,直接 panic,其實(shí) RefCell.borrow 時也會做類似的檢測,當(dāng)已經(jīng)獲取了可變引用也是直接 panic, 當(dāng)然為了避免 panic,可以用 RefCell.try_borrow 和 RefCell.try_borrow_mut 來獲取一個 Result 類型。文章來源地址http://www.zghlxwxcb.cn/news/detail-463984.html

到了這里,關(guān)于rust 智能指針的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • rust 智能指針

    Rust中基本數(shù)據(jù)類型(如整數(shù)、浮點(diǎn)數(shù)、布爾值等)通常存儲在棧上。而動態(tài)分配的數(shù)據(jù),如 BoxT 和 VecT 等,存儲在堆上。 Rust 中 Box 是一種智能指針類型,通常用于將值放置在堆上而不是棧上。在 Rust 中,由于所有值的默認(rèn)生命周期都在當(dāng)前作用域結(jié)束時結(jié)束,因此在情況需

    2024年02月06日
    瀏覽(18)
  • Rust- 智能指針

    A smart pointer is a data structure that not only acts like a pointer but provides additional functionality. This “smartness” comes from the fact that smart pointers encapsulate additional logical or semantic rules, which are automatically applied to simplify memory or resource management tasks. While different programming languages implement smart point

    2024年02月14日
    瀏覽(20)
  • rust學(xué)習(xí)-智能指針

    rust學(xué)習(xí)-智能指針

    示例1 無意義的例子:將一個單獨(dú)的值存放在堆上并不是很有意義,b更應(yīng)該放到棧上 示例2-遞歸類型 一種無法在編譯時知道大小的類型是 遞歸類型(recursive type) 其值的一部分可以是相同類型的另一個值 遞歸類型來源于Lisp語言:cons 函數(shù)(“construct function\\\" 的縮寫)利用兩

    2024年02月16日
    瀏覽(14)
  • 【Rust】Rust學(xué)習(xí) 第十四章智能指針

    【Rust】Rust學(xué)習(xí) 第十四章智能指針

    指針 ?( pointer )是一個包含內(nèi)存地址的變量的通用概念。這個地址引用,或 “指向”(points at)一些其他數(shù)據(jù)。Rust 中最常見的指針是第四章介紹的? 引用 ( reference )。引用以? ?符號為標(biāo)志并借用了他們所指向的值。除了引用數(shù)據(jù)沒有任何其他特殊功能。它們也沒有任

    2024年02月12日
    瀏覽(20)
  • 【Rust】Rust學(xué)習(xí) 第十五章智能指針

    【Rust】Rust學(xué)習(xí) 第十五章智能指針

    指針 ?( pointer )是一個包含內(nèi)存地址的變量的通用概念。這個地址引用,或 “指向”(points at)一些其他數(shù)據(jù)。Rust 中最常見的指針是第四章介紹的? 引用 ( reference )。引用以? ?符號為標(biāo)志并借用了他們所指向的值。除了引用數(shù)據(jù)沒有任何其他特殊功能。它們也沒有任

    2024年02月12日
    瀏覽(28)
  • 【Rust 基礎(chǔ)篇】Rust Rc 智能指針的使用

    在 Rust 中,Rc(Reference Counting)是一種智能指針,用于實(shí)現(xiàn)多所有權(quán)共享數(shù)據(jù)的引用計(jì)數(shù)。Rc 智能指針允許多個所有者共享相同的數(shù)據(jù),并在沒有任何所有者時自動釋放數(shù)據(jù)。 本篇博客將詳細(xì)介紹 Rust 中 Rc 智能指針的使用方法和相關(guān)概念,以及它在代碼中的應(yīng)用場景。 Rc 智

    2024年02月16日
    瀏覽(17)
  • 【跟小嘉學(xué) Rust 編程】十五、智能指針

    【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ) 【跟小嘉學(xué) Rust 編程】二、Rust 包管理工具使用 【跟小嘉學(xué) Rust 編程】三、Rust 的基本程序概念 【跟小嘉學(xué) Rust 編程】四、理解 Rust 的所有權(quán)概念 【跟小嘉學(xué) Rust 編程】五、使用結(jié)構(gòu)體關(guān)聯(lián)結(jié)構(gòu)化數(shù)據(jù) 【跟小嘉學(xué) Rust 編程】六、枚舉

    2024年02月11日
    瀏覽(23)
  • Rust編程語言入門之智能指針

    指針:一個變量在內(nèi)存中包含的是一個地址(指向其它數(shù)據(jù)) Rust 中最常見的指針就是”引用“ 引用: 使用 借用它指向的值 沒有其余開銷 最常見的指針類型 智能指針是這樣一些數(shù)據(jù)結(jié)構(gòu): 行為和指針相似 有額外的元數(shù)據(jù)和功能 通過記錄所有者的數(shù)量,使一份數(shù)據(jù)被多個

    2023年04月16日
    瀏覽(26)
  • 將浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)——浮點(diǎn)數(shù)和整數(shù)之間的轉(zhuǎn)換方法詳解

    將浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)——浮點(diǎn)數(shù)和整數(shù)之間的轉(zhuǎn)換方法詳解 在日常編程中,我們經(jīng)常需要將浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)或者將整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)。這種轉(zhuǎn)換可能因?yàn)椴涣私馄浔澈蟮脑矶霈F(xiàn)錯誤,導(dǎo)致程序運(yùn)行異常。本文將詳細(xì)介紹浮點(diǎn)數(shù)和整數(shù)之間的轉(zhuǎn)換方法,以幫助開發(fā)者在進(jìn)

    2024年02月12日
    瀏覽(20)
  • Rust教程:How to Rust-基本類型

    本專欄是優(yōu)質(zhì)Rust技術(shù)專欄,推薦精通一門技術(shù)棧的蟹友,不建議完全無計(jì)算機(jī)基礎(chǔ)的同學(xué) 感謝Rust圣經(jīng)開源社區(qū)的同學(xué),為后來者提供了非常優(yōu)秀的Rust學(xué)習(xí)資源 本文使用: 操作系統(tǒng)macOS Sonoma 14 / Apple M1 編譯器:Rustc Cargo 感謝一路相伴的朋友們,感謝你們的支持 ^?_?^ Rust教

    2024年04月12日
    瀏覽(50)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包