# 《Rust实战》Rust->物化主义者box指针的智能
指针一般存的是另一个变量在内存里的地址值
在Rust里的智能指针,比传统的指针多了一些所谓的<智能>
1. 添加额外信息
2. 管理引用计数
3. 资源自动回收
先看看box指针,box指针会强制资源在堆上
Box
```cpp
fn foo() -> Box
{
let i = 100u32;
let b = Box::new(i);
let j=i;
b
}
fn main() {
let i_addr = foo();
println!("{i_addr}");
}
```
这个程序可以编译通过,因为box实例对于整数是copy,对于对于已知尺寸的数据类型创建会在栈上,在Box::new(i)后,会将栈上的i copy到堆,将指针返回给i_addr
```cpp
struct P {
x: u32,
y: u32
}
fn foo() -> Box {
let p = P {x: 10, y: 20};
let b = Box::new(p);
let q = p;
b
}
fn main() {
let _p = foo();
}
```
这个程序编译通不过,因为相对上一个程序,p是move行为
box解引用的时候这两种也会有区别,对于move类型的解引用会释放所有权