Rust内存管理

总体导向图

Rust内存管理_第1张图片

C++以T*为分界,左物右指。T是类型名,x是变量名
把握一个关键:

  • 指针类型定义时候,Rust 存在&,C++存在*,定义类型名x本质就是一个指针类型,因此mut/const标记靠近谁就定义了谁的行为
  • Rust中mut靠近x就代表x可变,也就是指针可变;同理C++中const靠近x就代表x可变,也就是指针不可变。
  • Rust中mut靠近类型T,就代变内容可变;同理C++中const靠近T就代表内容不可变。
Rust C++ 说明
let x : &T const T* const x 指针和内容均不可变
let x : &mut T T* const x 指针不可变,内容可变
let mut x : &T const T* x 指针可变,内容不可变
let mut x : &mut T T* x 指针和内容均可变

举例Rust:

//情况一指针和内容均不可变
pub fn Pconst_Cconst(){
	let x : &i32 = &33; 
	let y : i32 = 34;
	*x = 55; // error 试图改变内容
	x = &y; // error 试图改变指针
}
// 情况二,指针不可变,内容可变
pub fn Pconst_Cmut(){
    let x :&mut i32 = &mut 33; 
	let y : &mut i32 = &mut 34;
	*x = 55; // Ok 可以改变内容
	x = y; // error 试图改变指针
}
// 情况三,指针可变,内容不可变
pub fn Pmut_Cconst(){
    let mut x : &i32 = &33; 
    let mut y : i32 = 34;
    *x = 55; // error 试图改变内容
    x = &y; // Ok 可以改变指针本身
}
// 情况四,指针和内容均可变
pub fn Pmut_Cmut(){
    let mut x : &mut i32 = &mut 33; 
    let mut y : i32 = 34;
    *x = 55; // Ok 可以改变内容
    x = &mut y; // Ok 可以改变指针本身
}

举例C++:

//情况一指针和内容均不可变
void Pconst_Cconst(){
    int i = 33;
    int y = 35;
    const int* const x = &i;
    *x = 34; // error 试图改变内容
    x = &y; // error 试图改变指针
}
// 情况二,指针不可变,内容可变
void Pconst_Cmut(){
    int i = 33;
    int y = 35;
    int* const x = &i;
    *x = 34; // Ok 可以改变内容
    x = &y; // error 试图改变指针
}

// 情况三,

你可能感兴趣的:(rust,内存管理)