Skip to content
Snippets Groups Projects
Commit e613ed1a authored by orestis.malaspin's avatar orestis.malaspin
Browse files

added slides

parent 378a82c5
No related branches found
No related tags found
No related merge requests found
Pipeline #
......@@ -14,6 +14,10 @@ fn main() {
let n = &notebook;
borrow(n);
borrow(&notebook);
// n.push("Je préférerais regarder la télé.") // attention on a emprunté notebook
// On ne peut pas le modifier
// notebook.push("Ou sortir dans le jardin.")
} // la référence n est détruite
borrow(&notebook); // on peut réutiliser notebook
}
......@@ -222,7 +222,7 @@ fn main() {
## Borrowing
### Solution: le propriétaire **prête** ses données.
Solution: le propriétaire **prête** ses données.
1. On crée une référence vers les données (par défaut immutable).
2. On peut donner la référence.
......@@ -241,7 +241,6 @@ fn main() {
borrow(& notebook); // on crée une référence et on la passe à borrow
borrow(& notebook); // on peut réutiliser notebook
}
</code></pre>
......@@ -251,6 +250,42 @@ Ce qui se passe en mémoire:
![](figs/mem_vec_borrowing.svg){#fig:mem_vec_borrowing width=45%}![](figs/mem_vec_borrowing_end.svg){#fig:mem_vec_borrowing_end width=45%}
### Attention: un emprunt est **immutable** par définition!
## Borrowing en pratique (3/3)
### Que se passe-t-il
:::::::::::::: {.columns}
::: {.column width="50%"}
```
{
vector<string> v; // alloué sur la pile
// et l'espace est
// contigu en mémoire
...
auto& elem = v[0]; // référence
v.push_back(a_string);
cout << elem;
...
} // destruction automatique
```
:::
::: {.column width="50%"}
<pre><code data-trim="hljs rust" class="lang-rust">
fn main() {
let mut v = Vec::new(); // par défaut notebook est immutable
v.push("Test.");
let elem = &v[0]; // référence
v.push("Test again.");
}
</code></pre>
:::
::::::::::::::
<!-- - `vector` et `string` sont alignés en mémoire.
- références "light".
- destruction déterministe. -->
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment