{"id":2034,"date":"2015-04-10T10:00:22","date_gmt":"2015-04-10T10:00:22","guid":{"rendered":"http:\/\/anthroponaute.fr\/blog-informatique\/?p=2034"},"modified":"2016-07-27T19:33:16","modified_gmt":"2016-07-27T19:33:16","slug":"raii-resource-acquisition-is-initialization","status":"publish","type":"post","link":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/?p=2034","title":{"rendered":"RAII (Resource Acquisition Is Initialization)"},"content":{"rendered":"<p><a href=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/04\/02_clipmaps_02.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone  wp-image-2042\" src=\"https:\/\/anthropoya.cluster014.ovh.net\/blog-informatique\/wp-content\/uploads\/2015\/04\/02_clipmaps_02.jpg\" alt=\"02_clipmaps_02\" width=\"194\" height=\"232\" \/><\/a><\/p>\n<p><strong>Intro :<\/strong><\/p>\n<p>Parfois on a besoin simplement d&rsquo;utiliser une variable ou un objet de mani\u00e8re temporaire, pour ensuite le ou la d\u00e9truire facilement apr\u00e8s son utilisation.<\/p>\n<p>En C++, les objets r\u00e9sidant sur la <strong>pile<\/strong> sont automatiquement d\u00e9truits lors de la sortie d&rsquo;un bloc de port\u00e9e, y compris dans le cas d&rsquo;une lev\u00e9e d&rsquo;exception <sup>;<\/sup> leur destructeur est appel\u00e9 avant que l&rsquo;exception ne se propage.<\/p>\n<p>On peut alors se servir de ce m\u00e9canisme pour d\u00e9truire automatiquement un objet une fois effectu\u00e9 son utilisation.<\/p>\n<p><strong>Pr\u00e9requis :<\/strong><\/p>\n<p>\u2013 Avoir quelques notions de C++<\/p>\n<p><strong>Explications :<\/strong><\/p>\n<p>Il s&rsquo;agit de manipuler un objet local qui sera utilis\u00e9 dans la port\u00e9e d&rsquo;un bout de code et qui sera ensuite lib\u00e9r\u00e9e lors de sa destruction.<\/p>\n<p>Syst\u00e8me de profiling :<\/p>\n<p><strong>Exemple :<\/strong><\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\nvoid ExempleAvecRAII()\r\n{\r\n\u00a0 \/\/ On acquiert une ressource (un fichier)\r\n\u00a0 Fichier logFile(&quot;Log.txt&quot;);\r\n\u00a0\r\n\u00a0 logFile.Write(&quot;Bonjour!&quot;);\r\n\r\n  \/\/ Le fichier logFile sera automatiquement d\u00e9truit\r\n  \/\/ apr\u00e8s avoir atteint la fin de ce bloc de code.\r\n\r\n  \/\/ On n'a pas besoin d'appeler une quelconque fonction\r\n  \/\/ close()\r\n\r\n  \/* On peut lever aussi une exception juste ici. *\/\r\n  if (logFile.writeHasFailed())\r\n  {\r\n      throw std::exception(&quot;Erreur!&quot;);\r\n  }\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>R\u00e9sum\u00e9 :<\/strong><\/p>\n<p>Nous avons pr\u00e9sent\u00e9 le principe du RAII. Ce principe permet de simplifier les initialisation du constructeur d&rsquo;un objet, sans avoir \u00e0 appeler le destructeur.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Intro : Parfois on a besoin simplement d&rsquo;utiliser une variable ou un objet de mani\u00e8re temporaire, pour ensuite le ou la d\u00e9truire facilement apr\u00e8s son utilisation. En C++, les objets r\u00e9sidant sur la pile sont automatiquement d\u00e9truits lors de la sortie d&rsquo;un bloc de port\u00e9e, y compris dans le cas d&rsquo;une lev\u00e9e d&rsquo;exception ; leur [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[3],"tags":[],"_links":{"self":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/2034"}],"collection":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2034"}],"version-history":[{"count":29,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/2034\/revisions"}],"predecessor-version":[{"id":5234,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=\/wp\/v2\/posts\/2034\/revisions\/5234"}],"wp:attachment":[{"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2034"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2034"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.la-porte-des-nebuleuses.net\/blog-informatique\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2034"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}