tutorial: add an example of freezing a managed box
This commit is contained in:
parent
f78af18127
commit
0189ef3600
1 changed files with 15 additions and 4 deletions
|
@ -1173,10 +1173,7 @@ For a more in-depth explanation of borrowed pointers, read the
|
||||||
## Freezing
|
## Freezing
|
||||||
|
|
||||||
Borrowing an immutable pointer to an object freezes it and prevents mutation.
|
Borrowing an immutable pointer to an object freezes it and prevents mutation.
|
||||||
`Owned` objects have freezing enforced statically at compile-time. Mutable
|
`Owned` objects have freezing enforced statically at compile-time.
|
||||||
managed boxes handle freezing dynamically when any of their contents are
|
|
||||||
borrowed, and the task will fail if an attempt to modify them is made while
|
|
||||||
they are frozen.
|
|
||||||
|
|
||||||
~~~~
|
~~~~
|
||||||
let mut x = 5;
|
let mut x = 5;
|
||||||
|
@ -1186,6 +1183,20 @@ let mut x = 5;
|
||||||
// x is now unfrozen again
|
// x is now unfrozen again
|
||||||
~~~~
|
~~~~
|
||||||
|
|
||||||
|
Mutable managed boxes handle freezing dynamically when any of their contents
|
||||||
|
are borrowed, and the task will fail if an attempt to modify them is made while
|
||||||
|
they are frozen:
|
||||||
|
|
||||||
|
~~~~
|
||||||
|
let x = @mut 5;
|
||||||
|
let y = x;
|
||||||
|
{
|
||||||
|
let y = &*y; // the managed box is now frozen
|
||||||
|
// modifying it through x or y will cause a task failure
|
||||||
|
}
|
||||||
|
// the box is now unfrozen again
|
||||||
|
~~~~
|
||||||
|
|
||||||
# Dereferencing pointers
|
# Dereferencing pointers
|
||||||
|
|
||||||
Rust uses the unary star operator (`*`) to access the contents of a
|
Rust uses the unary star operator (`*`) to access the contents of a
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue