在Rust中,内存管理的核心概念包括裸指针(Raw Pointer)、引用(Reference)、和智能指针(Smart Pointer)。这些概念帮助 Rust 程序员以安全或灵活的方式处理内存。下面是它们的介绍及对比。 一、裸指针(Raw Pointer) 1、定义: 裸指针是 Rust 中一种不受借用检查器管理的指针类型,通常用 *const T 表示不可变裸指针,...
因而,通常我们使用一个reference来指向一个Slice切片,让我们看下例 letslice_1: &[i32] = &a[0..2] letslice_2: &[i32] = &b[0..2] 当reference指向dynamically sized type时,Rust实际会使用到一个胖指针(fat pointer),其中包含: 1.pointer (1 machine word):指向实际被切片的数据。 2.length (1 ...
我们之前学的引用(reference)就是这样, 引用算是指针的一种。 引用仅仅只是存储一个地址指向内存里的某个地址,没了,没有别的能力和消耗. 智能指针是另一个概念,而这个概念源于C++,在其他语言中也存在这一概念. 由于rust特有的所有权(ownership)和借用(borrow),这个智能指针又和别的语言有所不同. rust开发团队对...
但是 Rust 编译器似乎有意在“惩罚”我。例如,如果我有一个指向结构体的引用(reference),我可以写 `myref.x`。但如果我有一个指针(pointer),Rust 则要求我写 `(*myptr).x`,更糟的是:`(*(*myptr).p).y`。太可怕了!不仅可怕,而且完全适得其反。不安全代码应该是清晰的。 我还会把所有内置的集合类型...
但是 Rust 编译器似乎有意在“惩罚”我。例如,如果我有一个指向结构体的引用(reference),我可以写 `myref.x`。但如果我有一个指针(pointer),Rust 则要求我写 `(*myptr).x`,更糟的是:`(*(*myptr).p).y`。太可怕了!不仅可怕,而且完全适得其反。不安全代码应该是清晰的。
后面要说的指针pointer、字符段str、切片slice、引用reference、单元unit(代码中写作一对小括号())、空never(在代码中写做叹号!),也属于基本类型,但是说起来比前面几类复杂,本篇中讲一部分,后面章节的内容还会融合这些数据类型。 除基本类型外最常用的类型是字符串String、结构体struct、枚举enum、向量Vector和字典Has...
| ^^^ `some_string` is a `&` reference, so the data it refers to cannot be borrowed as mutable | help: consider changing this to be a mutable reference | 18 | fn change(some_string: &mut String) { | +++ 正如变量默认情况下是不可变的一样,引用也是不可变的。不允许修改我们引用的...
fnmain() {letreference_to_nothing=dangle(); }fndangle()->&String{// dangle returns a reference to a Stringlets=String::from("hello");// s is a new String&s// we return a reference to the String, s}// Here, s goes out of scope, and is dropped. Its memory goes away.// Dan...
fnmain(){letreference_to_nothing=dangle();}fndangle()->&String{lets=String::from("hello");&s} 错误如下: 代码语言:shell 复制 error[E0106]: missing lifetime specifier -->src/main.rs:60:16|60|fn dangle()->&String{|^ expected named lifetime parameter|=help: thisfunction's return type...
error: could not compile `ownership` due to previous error 正如变量默认是不可变的,引用也一样。(默认)不允许修改引用的值。 3.1.可变引用 我们通过一个小调整就能修复示例 6 代码中的错误,允许我们修改一个借用的值,这就是 可变引用(mutable reference):...