From b606ad2b19af0606015ada1d4d862010c7e3eef7 Mon Sep 17 00:00:00 2001 From: Orestis Malaspinas <orestis.malaspinas@hesge.ch> Date: Thu, 10 Jan 2019 16:48:31 +0100 Subject: [PATCH] updated ownership --- presentation/intro.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/presentation/intro.md b/presentation/intro.md index cd0e893..49509b7 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. -- GitLab