diff --git a/presentation/intro.md b/presentation/intro.md index cd0e893d10463b874d6d59ed2b58c30cd04802c1..49509b7a9fa1370cedb53a6356d6a07a1d764f18 100644 --- a/presentation/intro.md +++ b/presentation/intro.md @@ -152,10 +152,15 @@ fn main() { notebook.push("Les oiseaux chantent."); 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> +. . . + +Le transfert de l'ownership est complètement décidé à la **compilation**. + ## Ownership en pratique 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é** +## 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.