[{"data":1,"prerenderedAt":1126},["ShallowReactive",2],{"page-\u002Fcpp\u002Fmemoire-et-bibliotheque":3,"pieces-cpp":1084,"autour-\u002Fcpp\u002Fmemoire-et-bibliotheque":1109,"prerequis-\u002Fcpp\u002Fmemoire-et-bibliotheque":1113,"plan-cpp":1115},{"id":4,"title":5,"body":6,"description":1050,"extension":1051,"ligne":163,"meta":1052,"motsCles":1053,"navigation":193,"niveau":1056,"path":1057,"prerequis":1058,"ressources":1060,"seo":1072,"sources":1073,"stem":1082,"__hash__":1083},"docs\u002Fcpp\u002F06.memoire-et-bibliotheque.md","Mémoire, pointeurs intelligents et bibliothèque standard",{"type":7,"value":8,"toc":1039},"minimark",[9,14,39,43,52,59,114,118,139,149,152,158,321,339,393,396,401,478,491,495,509,669,682,686,693,801,811,814,819,952,965,980,984,1035],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,21,33],"ul",{},[18,19,20],"li",{},"La différence entre la pile et le tas.",[18,22,23,24,28,29,32],{},"Posséder un objet avec ",[25,26,27],"code",{},"std::unique_ptr"," ou ",[25,30,31],{},"std::shared_ptr",".",[18,34,35,36,32],{},"Trier et chercher avec les algorithmes, et associer clés et valeurs avec ",[25,37,38],{},"std::map",[10,40,42],{"id":41},"pile-et-tas","Pile et tas",[44,45,46,47,51],"p",{},"Les variables locales vivent sur la ",[48,49,50],"strong",{},"pile"," : une zone rapide, libérée automatiquement à la fin du bloc. Sa taille est limitée et la durée de vie de ses objets est liée à la portée.",[44,53,54,55,58],{},"Le ",[48,56,57],{},"tas"," est une zone plus vaste, où l'on réserve de la mémoire à la demande pour qu'elle survive à la fonction qui l'a créée. C'est à toi d'indiquer quand la libérer, ou plutôt à un objet qui s'en charge.",[60,61,62,77],"table",{},[63,64,65],"thead",{},[66,67,68,71,74],"tr",{},[69,70],"th",{},[69,72,73],{},"Pile",[69,75,76],{},"Tas",[78,79,80,92,103],"tbody",{},[66,81,82,86,89],{},[83,84,85],"td",{},"Libération",[83,87,88],{},"Automatique, en fin de bloc",[83,90,91],{},"Manuelle ou via un pointeur intelligent",[66,93,94,97,100],{},[83,95,96],{},"Taille",[83,98,99],{},"Limitée",[83,101,102],{},"Grande",[66,104,105,108,111],{},[83,106,107],{},"Usage",[83,109,110],{},"Variables locales",[83,112,113],{},"Objets à longue durée de vie ou de taille variable",[10,115,117],{"id":116},"pourquoi-éviter-new-et-delete","Pourquoi éviter new et delete",[44,119,120,121,124,125,128,129,131,132,135,136,138],{},"On peut allouer avec ",[25,122,123],{},"new"," et libérer avec ",[25,126,127],{},"delete",", mais l'oubli d'un ",[25,130,127],{}," provoque une ",[48,133,134],{},"fuite mémoire",", et un ",[25,137,127],{}," en trop plante le programme. Un retour anticipé ou une erreur au mauvais endroit suffit à les provoquer.",[44,140,141,142,145,146,32],{},"Depuis C++11, on confie cette tâche à des ",[48,143,144],{},"pointeurs intelligents",", des objets RAII qui libèrent la mémoire dans leur destructeur. Ils se trouvent dans l'en-tête ",[25,147,148],{},"\u003Cmemory>",[10,150,27],{"id":151},"stdunique_ptr",[44,153,154,155,157],{},"Un ",[25,156,27],{}," possède seul un objet. Quand il disparaît, l'objet est détruit :",[159,160,165],"pre",{"className":161,"code":162,"language":163,"meta":164,"style":164},"language-cpp shiki shiki-themes github-light-default github-dark-default github-dark-default","#include \u003Cmemory>\n#include \u003Cstring>\n\nstruct Recette {\n    std::string titre;\n};\n\nint main() {\n    auto r = std::make_unique\u003CRecette>(Recette{\"Gratin\"});\n    std::cout \u003C\u003C r->titre \u003C\u003C \"\\n\";\n}   \u002F\u002F la Recette est détruite ici, sans delete\n","cpp","",[25,166,167,180,188,195,209,224,230,235,248,283,311],{"__ignoreMap":164},[168,169,172,176],"span",{"class":170,"line":171},"line",1,[168,173,175],{"class":174},"sOnC1","#include",[168,177,179],{"class":178},"shWOn"," \u003Cmemory>\n",[168,181,183,185],{"class":170,"line":182},2,[168,184,175],{"class":174},[168,186,187],{"class":178}," \u003Cstring>\n",[168,189,191],{"class":170,"line":190},3,[168,192,194],{"emptyLinePlaceholder":193},true,"\n",[168,196,198,201,205],{"class":170,"line":197},4,[168,199,200],{"class":174},"struct",[168,202,204],{"class":203},"sIXEE"," Recette",[168,206,208],{"class":207},"scfrF"," {\n",[168,210,212,215,218,221],{"class":170,"line":211},5,[168,213,214],{"class":203},"    std",[168,216,217],{"class":207},"::",[168,219,220],{"class":203},"string",[168,222,223],{"class":207}," titre;\n",[168,225,227],{"class":170,"line":226},6,[168,228,229],{"class":207},"};\n",[168,231,233],{"class":170,"line":232},7,[168,234,194],{"emptyLinePlaceholder":193},[168,236,238,241,245],{"class":170,"line":237},8,[168,239,240],{"class":174},"int",[168,242,244],{"class":243},"syCW7"," main",[168,246,247],{"class":207},"() {\n",[168,249,251,254,257,260,263,265,268,271,274,277,280],{"class":170,"line":250},9,[168,252,253],{"class":174},"    auto",[168,255,256],{"class":207}," r ",[168,258,259],{"class":174},"=",[168,261,262],{"class":203}," std",[168,264,217],{"class":207},[168,266,267],{"class":243},"make_unique",[168,269,270],{"class":207},"\u003C",[168,272,273],{"class":203},"Recette",[168,275,276],{"class":207},">(Recette{",[168,278,279],{"class":178},"\"Gratin\"",[168,281,282],{"class":207},"});\n",[168,284,286,288,291,294,297,299,302,305,308],{"class":170,"line":285},10,[168,287,214],{"class":203},[168,289,290],{"class":207},"::cout ",[168,292,293],{"class":174},"\u003C\u003C",[168,295,296],{"class":207}," r->titre ",[168,298,293],{"class":174},[168,300,301],{"class":178}," \"",[168,303,304],{"class":174},"\\n",[168,306,307],{"class":178},"\"",[168,309,310],{"class":207},";\n",[168,312,314,317],{"class":170,"line":313},11,[168,315,316],{"class":207},"}",[168,318,320],{"class":319},"sd6ml","   \u002F\u002F la Recette est détruite ici, sans delete\n",[44,322,323,326,327,330,331,334,335,338],{},[25,324,325],{},"std::make_unique"," est disponible depuis C++14 : compile avec ",[25,328,329],{},"-std=c++17"," ou plus. Un ",[25,332,333],{},"unique_ptr"," ne se copie pas, puisqu'un seul propriétaire est permis. On transfère la propriété avec ",[25,336,337],{},"std::move"," :",[159,340,342],{"className":161,"code":341,"language":163,"meta":164,"style":164},"auto a = std::make_unique\u003CRecette>(Recette{\"Soupe\"});\nauto b = std::move(a);   \u002F\u002F b possède, a est vide (nullptr)\n",[25,343,344,371],{"__ignoreMap":164},[168,345,346,349,352,354,356,358,360,362,364,366,369],{"class":170,"line":171},[168,347,348],{"class":174},"auto",[168,350,351],{"class":207}," a ",[168,353,259],{"class":174},[168,355,262],{"class":203},[168,357,217],{"class":207},[168,359,267],{"class":243},[168,361,270],{"class":207},[168,363,273],{"class":203},[168,365,276],{"class":207},[168,367,368],{"class":178},"\"Soupe\"",[168,370,282],{"class":207},[168,372,373,375,378,380,382,384,387,390],{"class":170,"line":182},[168,374,348],{"class":174},[168,376,377],{"class":207}," b ",[168,379,259],{"class":174},[168,381,262],{"class":203},[168,383,217],{"class":207},[168,385,386],{"class":243},"move",[168,388,389],{"class":207},"(a);",[168,391,392],{"class":319},"   \u002F\u002F b possède, a est vide (nullptr)\n",[10,394,31],{"id":395},"stdshared_ptr",[44,397,154,398,400],{},[25,399,31],{}," autorise plusieurs propriétaires. L'objet est détruit quand le dernier d'entre eux disparaît, grâce à un compteur de références :",[159,402,404],{"className":161,"code":403,"language":163,"meta":164,"style":164},"auto a = std::make_shared\u003CRecette>(Recette{\"Ratatouille\"});\nauto b = a;   \u002F\u002F copie permise, deux propriétaires\nstd::cout \u003C\u003C a.use_count() \u003C\u003C \"\\n\";   \u002F\u002F 2\n",[25,405,406,432,446],{"__ignoreMap":164},[168,407,408,410,412,414,416,418,421,423,425,427,430],{"class":170,"line":171},[168,409,348],{"class":174},[168,411,351],{"class":207},[168,413,259],{"class":174},[168,415,262],{"class":203},[168,417,217],{"class":207},[168,419,420],{"class":243},"make_shared",[168,422,270],{"class":207},[168,424,273],{"class":203},[168,426,276],{"class":207},[168,428,429],{"class":178},"\"Ratatouille\"",[168,431,282],{"class":207},[168,433,434,436,438,440,443],{"class":170,"line":182},[168,435,348],{"class":174},[168,437,377],{"class":207},[168,439,259],{"class":174},[168,441,442],{"class":207}," a;",[168,444,445],{"class":319},"   \u002F\u002F copie permise, deux propriétaires\n",[168,447,448,451,453,455,458,461,464,466,468,470,472,475],{"class":170,"line":190},[168,449,450],{"class":203},"std",[168,452,290],{"class":207},[168,454,293],{"class":174},[168,456,457],{"class":207}," a.",[168,459,460],{"class":243},"use_count",[168,462,463],{"class":207},"() ",[168,465,293],{"class":174},[168,467,301],{"class":178},[168,469,304],{"class":174},[168,471,307],{"class":178},[168,473,474],{"class":207},";",[168,476,477],{"class":319},"   \u002F\u002F 2\n",[479,480,481],"tip",{},[44,482,483,484,486,487,490],{},"Choisis ",[25,485,333],{}," par défaut. Passe à ",[25,488,489],{},"shared_ptr"," seulement si la propriété est réellement partagée, car le compteur a un coût.",[10,492,494],{"id":493},"les-algorithmes","Les algorithmes",[44,496,497,498,501,502,505,506,338],{},"L'en-tête ",[25,499,500],{},"\u003Calgorithm>"," fournit des fonctions prêtes à l'emploi qui travaillent sur des plages d'éléments, délimitées par ",[25,503,504],{},"begin()"," et ",[25,507,508],{},"end()",[159,510,512],{"className":161,"code":511,"language":163,"meta":164,"style":164},"#include \u003Calgorithm>\n#include \u003Cvector>\n\nstd::vector\u003Cint> temps{40, 10, 25};\nstd::sort(temps.begin(), temps.end());   \u002F\u002F 10 25 40\n\nauto it = std::find(temps.begin(), temps.end(), 25);\nif (it != temps.end()) {\n    std::cout \u003C\u003C \"Trouvé\\n\";\n}\n",[25,513,514,521,528,532,565,592,596,628,647,664],{"__ignoreMap":164},[168,515,516,518],{"class":170,"line":171},[168,517,175],{"class":174},[168,519,520],{"class":178}," \u003Calgorithm>\n",[168,522,523,525],{"class":170,"line":182},[168,524,175],{"class":174},[168,526,527],{"class":178}," \u003Cvector>\n",[168,529,530],{"class":170,"line":190},[168,531,194],{"emptyLinePlaceholder":193},[168,533,534,536,538,541,543,545,548,552,555,558,560,563],{"class":170,"line":197},[168,535,450],{"class":203},[168,537,217],{"class":207},[168,539,540],{"class":203},"vector",[168,542,270],{"class":207},[168,544,240],{"class":174},[168,546,547],{"class":207},"> temps{",[168,549,551],{"class":550},"s5iOY","40",[168,553,554],{"class":207},", ",[168,556,557],{"class":550},"10",[168,559,554],{"class":207},[168,561,562],{"class":550},"25",[168,564,229],{"class":207},[168,566,567,569,571,574,577,580,583,586,589],{"class":170,"line":211},[168,568,450],{"class":203},[168,570,217],{"class":207},[168,572,573],{"class":243},"sort",[168,575,576],{"class":207},"(temps.",[168,578,579],{"class":243},"begin",[168,581,582],{"class":207},"(), temps.",[168,584,585],{"class":243},"end",[168,587,588],{"class":207},"());",[168,590,591],{"class":319},"   \u002F\u002F 10 25 40\n",[168,593,594],{"class":170,"line":226},[168,595,194],{"emptyLinePlaceholder":193},[168,597,598,600,603,605,607,609,612,614,616,618,620,623,625],{"class":170,"line":232},[168,599,348],{"class":174},[168,601,602],{"class":207}," it ",[168,604,259],{"class":174},[168,606,262],{"class":203},[168,608,217],{"class":207},[168,610,611],{"class":243},"find",[168,613,576],{"class":207},[168,615,579],{"class":243},[168,617,582],{"class":207},[168,619,585],{"class":243},[168,621,622],{"class":207},"(), ",[168,624,562],{"class":550},[168,626,627],{"class":207},");\n",[168,629,630,633,636,639,642,644],{"class":170,"line":237},[168,631,632],{"class":174},"if",[168,634,635],{"class":207}," (it ",[168,637,638],{"class":174},"!=",[168,640,641],{"class":207}," temps.",[168,643,585],{"class":243},[168,645,646],{"class":207},"()) {\n",[168,648,649,651,653,655,658,660,662],{"class":170,"line":250},[168,650,214],{"class":203},[168,652,290],{"class":207},[168,654,293],{"class":174},[168,656,657],{"class":178}," \"Trouvé",[168,659,304],{"class":174},[168,661,307],{"class":178},[168,663,310],{"class":207},[168,665,666],{"class":170,"line":285},[168,667,668],{"class":207},"}\n",[44,670,671,674,675,678,679,681],{},[25,672,673],{},"std::find"," renvoie un ",[48,676,677],{},"itérateur",", objet qui désigne un élément. S'il vaut ",[25,680,508],{},", rien n'a été trouvé.",[10,683,685],{"id":684},"les-lambdas","Les lambdas",[44,687,688,689,692],{},"Un algorithme peut recevoir une fonction anonyme, la ",[48,690,691],{},"lambda",", pour personnaliser son comportement :",[159,694,696],{"className":161,"code":695,"language":163,"meta":164,"style":164},"std::vector\u003CRecette> recettes{{\"Tarte\"}, {\"Gratin\"}, {\"Soupe\"}};\n\nstd::sort(recettes.begin(), recettes.end(),\n          [](const Recette& a, const Recette& b) {\n              return a.titre \u003C b.titre;\n          });\n",[25,697,698,728,732,753,783,796],{"__ignoreMap":164},[168,699,700,702,704,706,708,710,713,716,719,721,723,725],{"class":170,"line":171},[168,701,450],{"class":203},[168,703,217],{"class":207},[168,705,540],{"class":203},[168,707,270],{"class":207},[168,709,273],{"class":203},[168,711,712],{"class":207},"> recettes{{",[168,714,715],{"class":178},"\"Tarte\"",[168,717,718],{"class":207},"}, {",[168,720,279],{"class":178},[168,722,718],{"class":207},[168,724,368],{"class":178},[168,726,727],{"class":207},"}};\n",[168,729,730],{"class":170,"line":182},[168,731,194],{"emptyLinePlaceholder":193},[168,733,734,736,738,740,743,745,748,750],{"class":170,"line":190},[168,735,450],{"class":203},[168,737,217],{"class":207},[168,739,573],{"class":243},[168,741,742],{"class":207},"(recettes.",[168,744,579],{"class":243},[168,746,747],{"class":207},"(), recettes.",[168,749,585],{"class":243},[168,751,752],{"class":207},"(),\n",[168,754,755,758,761,763,766,769,771,773,775,777,780],{"class":170,"line":197},[168,756,757],{"class":207},"          [](",[168,759,760],{"class":174},"const",[168,762,204],{"class":203},[168,764,765],{"class":174},"&",[168,767,768],{"class":203}," a",[168,770,554],{"class":207},[168,772,760],{"class":174},[168,774,204],{"class":203},[168,776,765],{"class":174},[168,778,779],{"class":203}," b",[168,781,782],{"class":207},") {\n",[168,784,785,788,791,793],{"class":170,"line":211},[168,786,787],{"class":174},"              return",[168,789,790],{"class":207}," a.titre ",[168,792,270],{"class":174},[168,794,795],{"class":207}," b.titre;\n",[168,797,798],{"class":170,"line":226},[168,799,800],{"class":207},"          });\n",[44,802,803,804,807,808,32],{},"Les crochets ",[25,805,806],{},"[]"," précèdent les paramètres. Ils permettent aussi de capturer des variables locales : ",[25,809,810],{},"[seuil](int t) { return t \u003C seuil; }",[10,812,38],{"id":813},"stdmap",[44,815,154,816,818],{},[25,817,38],{}," associe une clé à une valeur et garde ses clés triées :",[159,820,822],{"className":161,"code":821,"language":163,"meta":164,"style":164},"#include \u003Cmap>\n#include \u003Cstring>\n\nstd::map\u003Cstd::string, int> notes;\nnotes[\"Gratin\"] = 4;\nnotes[\"Tarte\"] = 5;\n\nfor (const auto& [titre, note] : notes) {\n    std::cout \u003C\u003C titre \u003C\u003C \" : \" \u003C\u003C note \u003C\u003C \"\\n\";\n}\n",[25,823,824,831,837,841,864,881,896,900,916,948],{"__ignoreMap":164},[168,825,826,828],{"class":170,"line":171},[168,827,175],{"class":174},[168,829,830],{"class":178}," \u003Cmap>\n",[168,832,833,835],{"class":170,"line":182},[168,834,175],{"class":174},[168,836,187],{"class":178},[168,838,839],{"class":170,"line":190},[168,840,194],{"emptyLinePlaceholder":193},[168,842,843,845,848,850,852,854,856,858,861],{"class":170,"line":197},[168,844,450],{"class":203},[168,846,847],{"class":207},"::map",[168,849,270],{"class":174},[168,851,450],{"class":203},[168,853,217],{"class":207},[168,855,220],{"class":207},[168,857,554],{"class":207},[168,859,860],{"class":174},"int>",[168,862,863],{"class":207}," notes;\n",[168,865,866,869,871,874,876,879],{"class":170,"line":211},[168,867,868],{"class":207},"notes[",[168,870,279],{"class":178},[168,872,873],{"class":207},"] ",[168,875,259],{"class":174},[168,877,878],{"class":550}," 4",[168,880,310],{"class":207},[168,882,883,885,887,889,891,894],{"class":170,"line":226},[168,884,868],{"class":207},[168,886,715],{"class":178},[168,888,873],{"class":207},[168,890,259],{"class":174},[168,892,893],{"class":550}," 5",[168,895,310],{"class":207},[168,897,898],{"class":170,"line":232},[168,899,194],{"emptyLinePlaceholder":193},[168,901,902,905,908,910,913],{"class":170,"line":237},[168,903,904],{"class":174},"for",[168,906,907],{"class":207}," (",[168,909,760],{"class":174},[168,911,912],{"class":174}," auto&",[168,914,915],{"class":207}," [titre, note] : notes) {\n",[168,917,918,920,922,924,927,929,932,935,938,940,942,944,946],{"class":170,"line":250},[168,919,214],{"class":203},[168,921,290],{"class":207},[168,923,293],{"class":174},[168,925,926],{"class":207}," titre ",[168,928,293],{"class":174},[168,930,931],{"class":178}," \" : \"",[168,933,934],{"class":174}," \u003C\u003C",[168,936,937],{"class":207}," note ",[168,939,293],{"class":174},[168,941,301],{"class":178},[168,943,304],{"class":174},[168,945,307],{"class":178},[168,947,310],{"class":207},[168,949,950],{"class":170,"line":285},[168,951,668],{"class":207},[44,953,954,955,958,959,28,962,32],{},"La forme ",[25,956,957],{},"[titre, note]"," est une décomposition structurée, disponible depuis C++17. Pour tester la présence d'une clé sans la créer, utilise ",[25,960,961],{},"notes.find(\"Soupe\")",[25,963,964],{},"notes.count(\"Soupe\")",[966,967,968],"warning",{},[44,969,970,971,974,975,28,977,32],{},"L'écriture ",[25,972,973],{},"notes[\"Soupe\"]"," crée l'entrée avec la valeur 0 si elle n'existe pas. Pour une simple lecture, préfère ",[25,976,611],{},[25,978,979],{},"at",[10,981,983],{"id":982},"à-retenir","À retenir",[15,985,986,989,997,1005,1013,1027],{},[18,987,988],{},"Les variables locales vivent sur la pile et sont libérées toutes seules ; le tas sert aux objets à durée de vie plus longue.",[18,990,991,992,505,994,996],{},"Évite ",[25,993,123],{},[25,995,127],{}," : un pointeur intelligent libère la mémoire pour toi.",[18,998,999,1001,1002,1004],{},[25,1000,27],{}," a un seul propriétaire ; ",[25,1003,31],{}," en autorise plusieurs.",[18,1006,1007,1008,505,1010,32],{},"Crée-les avec ",[25,1009,325],{},[25,1011,1012],{},"std::make_shared",[18,1014,1015,505,1018,1020,1021,1023,1024,1026],{},[25,1016,1017],{},"std::sort",[25,1019,673],{}," travaillent sur une plage ",[25,1022,504],{}," à ",[25,1025,508],{},", avec une lambda pour personnaliser.",[18,1028,1029,1031,1032,1034],{},[25,1030,38],{}," associe clés et valeurs triées ; ",[25,1033,806],{}," crée l'entrée si elle manque.",[1036,1037,1038],"style",{},"html pre.shiki code .sOnC1, html code.shiki .sOnC1{--shiki-light:#CF222E;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .shWOn, html code.shiki .shWOn{--shiki-light:#0A3069;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}html pre.shiki code .sIXEE, html code.shiki .sIXEE{--shiki-light:#953800;--shiki-default:#FFA657;--shiki-dark:#FFA657}html pre.shiki code .scfrF, html code.shiki .scfrF{--shiki-light:#1F2328;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html pre.shiki code .syCW7, html code.shiki .syCW7{--shiki-light:#8250DF;--shiki-default:#D2A8FF;--shiki-dark:#D2A8FF}html pre.shiki code .sd6ml, html code.shiki .sd6ml{--shiki-light:#6E7781;--shiki-default:#8B949E;--shiki-dark:#8B949E}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s5iOY, html code.shiki .s5iOY{--shiki-light:#0550AE;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}",{"title":164,"searchDepth":182,"depth":190,"links":1040},[1041,1042,1043,1044,1045,1046,1047,1048,1049],{"id":12,"depth":182,"text":13},{"id":41,"depth":182,"text":42},{"id":116,"depth":182,"text":117},{"id":151,"depth":182,"text":27},{"id":395,"depth":182,"text":31},{"id":493,"depth":182,"text":494},{"id":684,"depth":182,"text":685},{"id":813,"depth":182,"text":38},{"id":982,"depth":182,"text":983},"Distinguer pile et tas, gérer la propriété avec unique_ptr et shared_ptr, puis utiliser les algorithmes et std::map de la bibliothèque standard.","md",{},[50,57,27,31,267,38,1017,691,1054,1055],"algorithmes","propriété","avance","\u002Fcpp\u002Fmemoire-et-bibliotheque",[1059],"\u002Fcpp\u002Fclasses-et-raii",[1061,1065,1069],{"nom":1062,"url":1063,"type":1064},"OpenClassrooms, Apprenez à programmer en C++","https:\u002F\u002Fopenclassrooms.com\u002Ffr\u002Fcourses\u002F1894236-programmez-avec-le-langage-c","cours",{"nom":1066,"url":1067,"type":1068},"cppreference.com, std::unique_ptr en français","https:\u002F\u002Ffr.cppreference.com\u002Fw\u002Fcpp\u002Fmemory\u002Funique_ptr","doc",{"nom":1070,"url":1071,"type":1068,"anglais":193},"cppreference.com, bibliothèque d'algorithmes (en anglais)","https:\u002F\u002Fen.cppreference.com\u002Fw\u002Fcpp\u002Falgorithm",{"title":5,"description":1050},[1074,1077,1080],{"nom":1075,"url":1076},"cppreference.com, gestion de la mémoire (version française partielle)","https:\u002F\u002Ffr.cppreference.com\u002Fw\u002Fcpp\u002Fmemory",{"nom":1078,"url":1079},"cppreference.com, std::map (version française partielle)","https:\u002F\u002Ffr.cppreference.com\u002Fw\u002Fcpp\u002Fcontainer\u002Fmap",{"nom":1081,"url":1071},"cppreference.com, algorithmes (en anglais)","cpp\u002F06.memoire-et-bibliotheque","GdC9B8tM2k19-MhWnKCeM1VH4UXpeC0Nl8hfh25ZPXk",[1085,1089,1093,1097,1101,1104,1105],{"path":1086,"title":1087,"stem":1088},"\u002Fcpp\u002Fpremier-programme","Premier programme","cpp\u002F01.premier-programme",{"path":1090,"title":1091,"stem":1092},"\u002Fcpp\u002Fconditions-boucles-fonctions","Conditions, boucles et fonctions","cpp\u002F02.conditions-boucles-fonctions",{"path":1094,"title":1095,"stem":1096},"\u002Fcpp\u002Fstring-et-vector","std::string et std::vector","cpp\u002F03.string-et-vector",{"path":1098,"title":1099,"stem":1100},"\u002Fcpp\u002Freferences-et-pointeurs","Références et pointeurs","cpp\u002F04.references-et-pointeurs",{"path":1059,"title":1102,"stem":1103},"Classes, constructeurs et RAII","cpp\u002F05.classes-et-raii",{"path":1057,"title":5,"stem":1082},{"path":1106,"title":1107,"stem":1108},"\u002Fcpp","C++","cpp\u002Findex",[1110,1112],{"title":1102,"path":1059,"stem":1103,"description":1111,"children":-1},"Définir ses propres types avec les classes, initialiser un objet avec un constructeur et libérer ses ressources automatiquement grâce au destructeur (RAII).",null,[1114],{"path":1059,"title":1102,"ligne":163},[1116,1118,1119,1120,1122,1123,1124],{"path":1086,"title":1087,"niveau":1117,"stem":1088},"debutant",{"path":1090,"title":1091,"niveau":1117,"stem":1092},{"path":1094,"title":1095,"niveau":1117,"stem":1096},{"path":1098,"title":1099,"niveau":1121,"stem":1100},"intermediaire",{"path":1059,"title":1102,"niveau":1121,"stem":1103},{"path":1057,"title":5,"niveau":1056,"stem":1082},{"path":1106,"title":1107,"niveau":1125,"stem":1108},"memo",1794583456788]