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

updated ownership

parent 78929b2d
No related branches found
No related tags found
No related merge requests found
Pipeline #
...@@ -152,10 +152,15 @@ fn main() { ...@@ -152,10 +152,15 @@ fn main() {
notebook.push("Les oiseaux chantent."); notebook.push("Les oiseaux chantent.");
do_something(notebook); // ownership transféré à do_something do_something(notebook); // ownership transféré à do_something
// do_something(notebook); // redo something do_something(notebook); // ici notebook ne possède plus ses données
// => erreur de compilation!
} }
</code></pre> </code></pre>
. . .
Le transfert de l'ownership est complètement décidé à la **compilation**.
## Ownership en pratique ## Ownership en pratique
Ce qui se passe en mémoire: Ce qui se passe en mémoire:
...@@ -168,6 +173,28 @@ Ce qui se passe en mémoire: ...@@ -168,6 +173,28 @@ Ce qui se passe en mémoire:
**`notebook` est détruit à la fin de `do_something` et ne peut plus être réutilisé** **`notebook` est détruit à la fin de `do_something` et ne peut plus être réutilisé**
## Ownership en pratique
En C++ une sytaxe similaire a un effet complètement différent
```
void do_something(notebook: vector<string>) {
// Do something with the notebook
} // la variable locale notebook est détruite et ses données aussi
// le notebook du main existe toujours
void main() {
vector<string> notebook; // par défaut notebook est mutable
notebook.push_back("Il fait beau.");
notebook.push_back("Les oiseaux chantent.");
do_something(notebook); // le copy-constructeur de notebook
// est invoqué
do_something(notebook); // on peut réutiliser notebook sans problème
}
```
<!-- - `vector` et `string` sont alignés en mémoire. <!-- - `vector` et `string` sont alignés en mémoire.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment