Skip to content

Commit

Permalink
Add a short discussion of shadowing and ownership in ch. 04
Browse files Browse the repository at this point in the history
Fixes #4001.
  • Loading branch information
chriskrycho committed Sep 30, 2024
1 parent 09239f3 commit ae8231d
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 0 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[package]
name = "ownership"
version = "0.1.0"
edition = "2021"

[dependencies]
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
fn main() {
// ANCHOR: here
let s = String::from("hello");
let s = String::from("ahoy");

println!("{s}, world!");
// ANCHOR_END: here
}
20 changes: 20 additions & 0 deletions src/ch04-01-what-is-ownership.md
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,26 @@ In addition, there’s a design choice that’s implied by this: Rust will never
automatically create “deep” copies of your data. Therefore, any *automatic*
copying can be assumed to be inexpensive in terms of runtime performance.

#### Scope and Shadowing

The inverse of this is true for the relationship between scoping, ownership, and
memory being freed via the `drop` function as well. Back in our discussion of
[Shadowing][shadowing], we noted that when you define a new variable with the
same name as an existing variable, it shadows the old variable. This is another
way that a variable can go out of scope.

Consider this code, for example:

```rust
{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-04b-shadowing/src/main.rs:here}}
```

We initially declare a variable `s` and bind it to a `String` with the value
`"hello"`. Then we immediately declare a new value `s`, which is a `String` with
the value `"ahoy"`. The second declaration shadows the first one, so it
immediately goes out of scope and its memory is freed. When we print the value
at the end, it will be `"ahoy, world!"`.

<!-- Old heading. Do not remove or links may break. -->
<a id="ways-variables-and-data-interact-clone"></a>

Expand Down

0 comments on commit ae8231d

Please sign in to comment.