[rust-014]关于形如T的borrowing借用

2024-06-11 08:48
文章标签 rust 借用 014 borrowing 形如

本文主要是介绍[rust-014]关于形如T的borrowing借用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考文献:https://doc.rust-lang.org/rust-by-example/scope/borrow.html

borrow,借用,借用不改变ownership,不会产生ownership的move。所以可以多次借用。

T是值,&T是reference引用。赋值使用引用,或者函数调用传参为引用,即形成“借用”。

借用,总是处于一个scope。只要这个scope没有运行结束,出借方就不会被释放,这是rust的规定。

// This function takes ownership of a box and destroys it
fn eat_box_i32(boxed_i32: Box<i32>) {println!("Destroying box that contains {}", boxed_i32);
}// This function borrows an i32
fn borrow_i32(borrowed_i32: &i32) {println!("This int is: {}", borrowed_i32);
}fn main() {//堆上的 boxed i32let boxed_i32 = Box::new(5_i32);//栈上的i32let stacked_i32 = 6_i32;//堆上和栈上,都可以被借用,借用不会导致move,不改变ownershipborrow_i32(&boxed_i32);borrow_i32(&stacked_i32);{//这是一个scope//_ref_to_i32,借用堆上的整数let _ref_to_i32: &i32 = &boxed_i32;//下面的语句会报错//如果没有_ref_to_i32的借用,eat_gox_i32函数会获得boxed_i32的ownership,函数运行结束后//会释放boxed_i32指向的内存。//堆上的整数,已经被借用了,在这个scope没有运行结束之前,不能释放boxed_i32
//        eat_box_i32(boxed_i32);// FIXME ^ Comment out this lineborrow_i32(_ref_to_i32);// scop结束,_ref_to_i32释放}//scope结束//此时,已经没有借用了,因此可以释放eat_box_i32(boxed_i32);
}

 

这篇关于[rust-014]关于形如T的borrowing借用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050702

相关文章

Rust 数据类型详解

《Rust数据类型详解》本文介绍了Rust编程语言中的标量类型和复合类型,标量类型包括整数、浮点数、布尔和字符,而复合类型则包括元组和数组,标量类型用于表示单个值,具有不同的表示和范围,本文介绍的非... 目录一、标量类型(Scalar Types)1. 整数类型(Integer Types)1.1 整数字

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

【Rust练习】12.枚举

练习题来自:https://practice-zh.course.rs/compound-types/enum.html 1 // 修复错误enum Number {Zero,One,Two,}enum Number1 {Zero = 0,One,Two,}// C语言风格的枚举定义enum Number2 {Zero = 0.0,One = 1.0,Two = 2.0,}fn m

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

第二十四章 rust中的运算符重载

注意 本系列文章已升级、转移至我的自建站点中,本章原文为:rust中的运算符重载 目录 注意一、前言二、基本使用三、常用运算符四、通用约束 一、前言 C/C++中有运算符重载这一概念,它的目的是让即使含不相干的内容也能通过我们自定义的方法进行运算符操作运算。 比如字符串本身是不能相加的,但由于C++中的String重载了运算符+,所以我们就可以将两个字符串进行相加、但实际

014.Python爬虫系列_解析练习

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈 优

【Rust光年纪】Rust 机器人学库全景:功能、安装与API概览

机器人学+Rust语言=无限可能:六款库带你开启创新之旅! 前言 随着机器人技术的快速发展,对于机器人学领域的高效、可靠的编程语言和库的需求也日益增加。本文将探讨一些用于 Rust 语言的机器人学库,以及它们的核心功能、使用场景、安装配置和 API 概览,旨在为机器人学爱好者和开发人员提供参考和指导。 欢迎订阅专栏:Rust光年纪 文章目录 机器人学+Rust语言=无限可能:

第二十二章 rust数据库使用:sea-orm详解

注意 本系列文章已升级、转移至我的自建站点中,本章原文为:rust数据库使用:sea-orm详解 目录 注意一、前言二、项目管理三、迁移文件四、实体文件五、业务使用 一、前言 只要开发稍微大型一点的项目,数据库都是离不开的。 rust目前并没有特别成熟的数据库框架,sea-orm这个框架是我目前所看到的成熟度最高的一个,并且仍在积极开发中。 所以本文将以sea-orm框

Rust使用之【宏】

一、简单使用clap clap = { version = "4.5.17", features = ["derive"] } 其中,什么是features = ["derive"]:表示你希望在添加 clap 依赖时启用 derive 特性。这通常意味着你希望使用 clap 的派生(derive)宏功能,这些功能可以简化创建命令行接口的代码。例如,derive 特性可以让你使用 #[der

第二十一章 rust与动静态库的结合使用

注意 本系列文章已升级、转移至我的自建站点中,本章原文为:rust与动静态库的结合使用 目录 注意一、前言二、库生成三、库使用四、总结 一、前言 rust中多了很多类型的库,比如前面章节中我们提到基本的bin与lib这两种crate类型库。 如果你在命令行执行下列语句: rustc --help 那么你将能找到这样的内容: --crate-type [bin|li