mirror of
https://github.com/ahgamut/rust-ape-example.git
synced 2024-11-25 01:01:01 +00:00
50 lines
1.3 KiB
Rust
50 lines
1.3 KiB
Rust
// ./src/scope/move.md
|
|
|
|
|
|
// This function takes ownership of the heap allocated memory
|
|
fn destroy_box(c: Box<i32>) {
|
|
println!("Destroying a box that contains {}", c);
|
|
|
|
// `c` is destroyed and the memory freed
|
|
}
|
|
|
|
fn part0() {
|
|
// _Stack_ allocated integer
|
|
let x = 5u32;
|
|
|
|
// *Copy* `x` into `y` - no resources are moved
|
|
let y = x;
|
|
|
|
// Both values can be independently used
|
|
println!("x is {}, and y is {}", x, y);
|
|
|
|
// `a` is a pointer to a _heap_ allocated integer
|
|
let a = Box::new(5i32);
|
|
|
|
println!("a contains: {}", a);
|
|
|
|
// *Move* `a` into `b`
|
|
let b = a;
|
|
// The pointer address of `a` is copied (not the data) into `b`.
|
|
// Both are now pointers to the same heap allocated data, but
|
|
// `b` now owns it.
|
|
|
|
// Error! `a` can no longer access the data, because it no longer owns the
|
|
// heap memory
|
|
//println!("a contains: {}", a);
|
|
// TODO ^ Try uncommenting this line
|
|
|
|
// This function takes ownership of the heap allocated memory from `b`
|
|
destroy_box(b);
|
|
|
|
// Since the heap memory has been freed at this point, this action would
|
|
// result in dereferencing freed memory, but it's forbidden by the compiler
|
|
// Error! Same reason as the previous Error
|
|
//println!("b contains: {}", b);
|
|
// TODO ^ Try uncommenting this line
|
|
}
|
|
|
|
pub fn main() {
|
|
part0();
|
|
}
|
|
|