[{"data":1,"prerenderedAt":4557},["ShallowReactive",2],{"wiki-page-\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen":3,"wiki-doc-items-\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen":4136,"language-switcher-data-\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen":4541,"wiki-i18n-paths-\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen":4556},{"id":4,"title":5,"body":6,"canonicalPath":4118,"chapterDepth":211,"chapterOrder":4119,"date":4120,"description":204,"docI18nKey":4121,"docKey":4122,"docRoot":4123,"docTitle":4124,"extension":4125,"i18nKey":4126,"isBlogPost":4127,"isWikiDoc":241,"isWikiIndex":4127,"layout":4128,"legacyPath":4128,"locale":4129,"localeSlug":4130,"meta":4131,"navigation":241,"path":4118,"seo":4132,"sourcePath":4133,"sourceStem":4126,"stem":4134,"wikiDepth":211,"__hash__":4135},"content\u002F_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针.md","智能指針",{"type":7,"value":8,"toc":4102},"minimark",[9,13,25,28,94,97,101,131,138,141,180,183,188,198,843,850,858,868,872,877,1384,1388,1394,1398,1410,1869,1873,1879,1886,1890,1901,2338,2342,2348,2363,2367,2370,2376,2382,2423,2426,2438,2441,2444,2497,2511,2556,2559,2574,2592,2595,2610,2622,2628,2631,2675,2679,2682,2701,2717,2723,2736,2742,2751,2764,2768,2773,2804,2807,2821,2831,2843,2846,2902,2905,2932,2950,2959,2976,2980,2989,3140,3154,3161,3196,3211,3214,3224,3265,3268,3274,3285,3289,3292,3323,3881,3885,3891,3894,3996,3999,4036,4039,4072,4075,4098],[10,11,12],"h2",{"id":12},"本節解決什麼問題",[14,15,16,20,21,24],"p",{},[17,18,19],"code",{},"new\u002Fdelete"," 能手動管理動態內存，但它要求你在所有路徑上都記得釋放資源。一旦函數提前 ",[17,22,23],{},"return","、拋異常，或者多個對象互相持有指針，就很容易出現內存泄漏、重複釋放、懸空指針。",[14,26,27],{},"智能指針把\"誰負責釋放對象\"寫進類型裏：",[29,30,31,47],"table",{},[32,33,34],"thead",{},[35,36,37,41,44],"tr",{},[38,39,5],"th",{"align":40},"left",[38,42,43],{"align":40},"所有權含義",[38,45,46],{"align":40},"典型場景",[48,49,50,64,77],"tbody",{},[35,51,52,58,61],{},[53,54,55],"td",{"align":40},[17,56,57],{},"std::unique_ptr\u003CT>",[53,59,60],{"align":40},"獨佔所有權",[53,62,63],{"align":40},"默認選擇，一個對象只有一個擁有者",[35,65,66,71,74],{},[53,67,68],{"align":40},[17,69,70],{},"std::shared_ptr\u003CT>",[53,72,73],{"align":40},"共享所有權",[53,75,76],{"align":40},"對象確實需要多個擁有者共同延長生命週期",[35,78,79,84,87],{},[53,80,81],{"align":40},[17,82,83],{},"std::weak_ptr\u003CT>",[53,85,86],{"align":40},"弱引用，不擁有",[53,88,89,90,93],{"align":40},"觀察 ",[17,91,92],{},"shared_ptr"," 管理的對象，常用於打破循環引用",[14,95,96],{},"智能指針本質上是 RAII：智能指針對象離開作用域時，它的析構函數會自動釋放所管理的對象。",[10,98,100],{"id":99},"c-標準版本","C++ 標準版本",[102,103,104,111,120,126],"ul",{},[105,106,107,110],"li",{},[17,108,109],{},"std::unique_ptr","：C++11",[105,112,113,116,117,110],{},[17,114,115],{},"std::shared_ptr"," \u002F ",[17,118,119],{},"std::weak_ptr",[105,121,122,125],{},[17,123,124],{},"std::make_unique","：C++14",[105,127,128,110],{},[17,129,130],{},"std::make_shared",[14,132,133,134,137],{},"需要的頭文件是 ",[17,135,136],{},"\u003Cmemory>","。",[10,139,140],{"id":140},"學習順序",[142,143,144,150,157,166,171,177],"ol",{},[105,145,146,147,149],{},"先看手動 ",[17,148,19],{}," 在提前返回時的問題。",[105,151,152,153,156],{},"用 ",[17,154,155],{},"unique_ptr"," 解決單一所有權和自動釋放。",[105,158,152,159,162,163,165],{},[17,160,161],{},"std::move"," 轉移 ",[17,164,155],{}," 所有權。",[105,167,168,169,137],{},"只有確實共享所有權時，才用 ",[17,170,92],{},[105,172,152,173,176],{},[17,174,175],{},"weak_ptr"," 觀察對象並打破循環引用。",[105,178,179],{},"函數參數要表達真實語義：借用、轉移、共享是三件不同的事。",[10,181,182],{"id":182},"示例代碼",[184,185,187],"h3",{"id":186},"示例-1舊寫法的問題和-unique_ptr-的-raii","示例 1：舊寫法的問題和 unique_ptr 的 RAII",[14,189,190,191,194,195,197],{},"這個例子故意讓函數提前返回。舊寫法中，",[17,192,193],{},"delete"," 沒有執行；",[17,196,155],{}," 版本中，即使提前返回也會自動析構。",[199,200,205],"pre",{"className":201,"code":202,"language":203,"meta":204,"style":204},"language-cpp shiki shiki-themes github-light github-dark","#include \u003Ciostream>\n#include \u003Cmemory>\n#include \u003Cstring>\n\nclass Resource\n{\n    std::string name_;\n\npublic:\n    explicit Resource(const std::string& name) : name_(name)\n    {\n        std::cout \u003C\u003C name_ \u003C\u003C \" created\\n\";\n    }\n\n    ~Resource()\n    {\n        std::cout \u003C\u003C name_ \u003C\u003C \" destroyed\\n\";\n    }\n\n    void use() const\n    {\n        std::cout \u003C\u003C name_ \u003C\u003C \" used\\n\";\n    }\n};\n\nbool old_style()\n{\n    Resource* res = new Resource(\"old resource\");\n    res->use();\n\n    std::cout \u003C\u003C \"old_style: early return\\n\";\n    return false; \u002F\u002F res 没有 delete，析构函数不会执行\n}\n\nbool modern_style()\n{\n    auto res = std::make_unique\u003CResource>(\"modern resource\");\n    res->use();\n\n    std::cout \u003C\u003C \"modern_style: early return\\n\";\n    return false; \u002F\u002F res 离开作用域，自动 delete\n}\n\nint main()\n{\n    std::cout \u003C\u003C std::boolalpha;\n\n    bool old_ok = old_style();\n    std::cout \u003C\u003C \"old_ok = \" \u003C\u003C old_ok \u003C\u003C \"\\n\";\n\n    std::cout \u003C\u003C \"---\\n\";\n\n    bool modern_ok = modern_style();\n    std::cout \u003C\u003C \"modern_ok = \" \u003C\u003C modern_ok \u003C\u003C \"\\n\";\n\n    return 0;\n}\n","cpp","",[17,206,207,220,228,236,243,253,260,269,274,280,320,326,356,362,367,376,381,403,408,413,428,433,455,460,466,471,482,487,515,527,532,550,566,572,577,587,592,623,632,637,655,667,672,677,688,693,707,712,727,755,760,778,783,797,823,828,838],{"__ignoreMap":204},[208,209,212,216],"span",{"class":210,"line":211},"line",1,[208,213,215],{"class":214},"szBVR","#include",[208,217,219],{"class":218},"sZZnC"," \u003Ciostream>\n",[208,221,223,225],{"class":210,"line":222},2,[208,224,215],{"class":214},[208,226,227],{"class":218}," \u003Cmemory>\n",[208,229,231,233],{"class":210,"line":230},3,[208,232,215],{"class":214},[208,234,235],{"class":218}," \u003Cstring>\n",[208,237,239],{"class":210,"line":238},4,[208,240,242],{"emptyLinePlaceholder":241},true,"\n",[208,244,246,249],{"class":210,"line":245},5,[208,247,248],{"class":214},"class",[208,250,252],{"class":251},"sScJk"," Resource\n",[208,254,256],{"class":210,"line":255},6,[208,257,259],{"class":258},"sVt8B","{\n",[208,261,263,266],{"class":210,"line":262},7,[208,264,265],{"class":251},"    std",[208,267,268],{"class":258},"::string name_;\n",[208,270,272],{"class":210,"line":271},8,[208,273,242],{"emptyLinePlaceholder":241},[208,275,277],{"class":210,"line":276},9,[208,278,279],{"class":214},"public:\n",[208,281,283,286,289,292,295,298,301,304,307,311,314,317],{"class":210,"line":282},10,[208,284,285],{"class":214},"    explicit",[208,287,288],{"class":251}," Resource",[208,290,291],{"class":258},"(",[208,293,294],{"class":214},"const",[208,296,297],{"class":251}," std",[208,299,300],{"class":258},"::",[208,302,303],{"class":251},"string",[208,305,306],{"class":214},"&",[208,308,310],{"class":309},"s4XuR"," name",[208,312,313],{"class":258},") : ",[208,315,316],{"class":251},"name_",[208,318,319],{"class":258},"(name)\n",[208,321,323],{"class":210,"line":322},11,[208,324,325],{"class":258},"    {\n",[208,327,329,332,335,338,341,343,346,350,353],{"class":210,"line":328},12,[208,330,331],{"class":251},"        std",[208,333,334],{"class":258},"::cout ",[208,336,337],{"class":214},"\u003C\u003C",[208,339,340],{"class":258}," name_ ",[208,342,337],{"class":214},[208,344,345],{"class":218}," \" created",[208,347,349],{"class":348},"sj4cs","\\n",[208,351,352],{"class":218},"\"",[208,354,355],{"class":258},";\n",[208,357,359],{"class":210,"line":358},13,[208,360,361],{"class":258},"    }\n",[208,363,365],{"class":210,"line":364},14,[208,366,242],{"emptyLinePlaceholder":241},[208,368,370,373],{"class":210,"line":369},15,[208,371,372],{"class":251},"    ~Resource",[208,374,375],{"class":258},"()\n",[208,377,379],{"class":210,"line":378},16,[208,380,325],{"class":258},[208,382,384,386,388,390,392,394,397,399,401],{"class":210,"line":383},17,[208,385,331],{"class":251},[208,387,334],{"class":258},[208,389,337],{"class":214},[208,391,340],{"class":258},[208,393,337],{"class":214},[208,395,396],{"class":218}," \" destroyed",[208,398,349],{"class":348},[208,400,352],{"class":218},[208,402,355],{"class":258},[208,404,406],{"class":210,"line":405},18,[208,407,361],{"class":258},[208,409,411],{"class":210,"line":410},19,[208,412,242],{"emptyLinePlaceholder":241},[208,414,416,419,422,425],{"class":210,"line":415},20,[208,417,418],{"class":214},"    void",[208,420,421],{"class":251}," use",[208,423,424],{"class":258},"() ",[208,426,427],{"class":214},"const\n",[208,429,431],{"class":210,"line":430},21,[208,432,325],{"class":258},[208,434,436,438,440,442,444,446,449,451,453],{"class":210,"line":435},22,[208,437,331],{"class":251},[208,439,334],{"class":258},[208,441,337],{"class":214},[208,443,340],{"class":258},[208,445,337],{"class":214},[208,447,448],{"class":218}," \" used",[208,450,349],{"class":348},[208,452,352],{"class":218},[208,454,355],{"class":258},[208,456,458],{"class":210,"line":457},23,[208,459,361],{"class":258},[208,461,463],{"class":210,"line":462},24,[208,464,465],{"class":258},"};\n",[208,467,469],{"class":210,"line":468},25,[208,470,242],{"emptyLinePlaceholder":241},[208,472,474,477,480],{"class":210,"line":473},26,[208,475,476],{"class":214},"bool",[208,478,479],{"class":251}," old_style",[208,481,375],{"class":258},[208,483,485],{"class":210,"line":484},27,[208,486,259],{"class":258},[208,488,490,493,496,499,502,505,507,509,512],{"class":210,"line":489},28,[208,491,492],{"class":258},"    Resource",[208,494,495],{"class":214},"*",[208,497,498],{"class":258}," res ",[208,500,501],{"class":214},"=",[208,503,504],{"class":214}," new",[208,506,288],{"class":251},[208,508,291],{"class":258},[208,510,511],{"class":218},"\"old resource\"",[208,513,514],{"class":258},");\n",[208,516,518,521,524],{"class":210,"line":517},29,[208,519,520],{"class":258},"    res->",[208,522,523],{"class":251},"use",[208,525,526],{"class":258},"();\n",[208,528,530],{"class":210,"line":529},30,[208,531,242],{"emptyLinePlaceholder":241},[208,533,535,537,539,541,544,546,548],{"class":210,"line":534},31,[208,536,265],{"class":251},[208,538,334],{"class":258},[208,540,337],{"class":214},[208,542,543],{"class":218}," \"old_style: early return",[208,545,349],{"class":348},[208,547,352],{"class":218},[208,549,355],{"class":258},[208,551,553,556,559,562],{"class":210,"line":552},32,[208,554,555],{"class":214},"    return",[208,557,558],{"class":348}," false",[208,560,561],{"class":258},";",[208,563,565],{"class":564},"sJ8bj"," \u002F\u002F res 没有 delete，析构函数不会执行\n",[208,567,569],{"class":210,"line":568},33,[208,570,571],{"class":258},"}\n",[208,573,575],{"class":210,"line":574},34,[208,576,242],{"emptyLinePlaceholder":241},[208,578,580,582,585],{"class":210,"line":579},35,[208,581,476],{"class":214},[208,583,584],{"class":251}," modern_style",[208,586,375],{"class":258},[208,588,590],{"class":210,"line":589},36,[208,591,259],{"class":258},[208,593,595,598,600,602,604,606,609,612,615,618,621],{"class":210,"line":594},37,[208,596,597],{"class":214},"    auto",[208,599,498],{"class":258},[208,601,501],{"class":214},[208,603,297],{"class":251},[208,605,300],{"class":258},[208,607,608],{"class":251},"make_unique",[208,610,611],{"class":258},"\u003C",[208,613,614],{"class":251},"Resource",[208,616,617],{"class":258},">(",[208,619,620],{"class":218},"\"modern resource\"",[208,622,514],{"class":258},[208,624,626,628,630],{"class":210,"line":625},38,[208,627,520],{"class":258},[208,629,523],{"class":251},[208,631,526],{"class":258},[208,633,635],{"class":210,"line":634},39,[208,636,242],{"emptyLinePlaceholder":241},[208,638,640,642,644,646,649,651,653],{"class":210,"line":639},40,[208,641,265],{"class":251},[208,643,334],{"class":258},[208,645,337],{"class":214},[208,647,648],{"class":218}," \"modern_style: early return",[208,650,349],{"class":348},[208,652,352],{"class":218},[208,654,355],{"class":258},[208,656,658,660,662,664],{"class":210,"line":657},41,[208,659,555],{"class":214},[208,661,558],{"class":348},[208,663,561],{"class":258},[208,665,666],{"class":564}," \u002F\u002F res 离开作用域，自动 delete\n",[208,668,670],{"class":210,"line":669},42,[208,671,571],{"class":258},[208,673,675],{"class":210,"line":674},43,[208,676,242],{"emptyLinePlaceholder":241},[208,678,680,683,686],{"class":210,"line":679},44,[208,681,682],{"class":214},"int",[208,684,685],{"class":251}," main",[208,687,375],{"class":258},[208,689,691],{"class":210,"line":690},45,[208,692,259],{"class":258},[208,694,696,698,700,702,704],{"class":210,"line":695},46,[208,697,265],{"class":251},[208,699,334],{"class":258},[208,701,337],{"class":214},[208,703,297],{"class":251},[208,705,706],{"class":258},"::boolalpha;\n",[208,708,710],{"class":210,"line":709},47,[208,711,242],{"emptyLinePlaceholder":241},[208,713,715,718,721,723,725],{"class":210,"line":714},48,[208,716,717],{"class":214},"    bool",[208,719,720],{"class":258}," old_ok ",[208,722,501],{"class":214},[208,724,479],{"class":251},[208,726,526],{"class":258},[208,728,730,732,734,736,739,742,744,746,749,751,753],{"class":210,"line":729},49,[208,731,265],{"class":251},[208,733,334],{"class":258},[208,735,337],{"class":214},[208,737,738],{"class":218}," \"old_ok = \"",[208,740,741],{"class":214}," \u003C\u003C",[208,743,720],{"class":258},[208,745,337],{"class":214},[208,747,748],{"class":218}," \"",[208,750,349],{"class":348},[208,752,352],{"class":218},[208,754,355],{"class":258},[208,756,758],{"class":210,"line":757},50,[208,759,242],{"emptyLinePlaceholder":241},[208,761,763,765,767,769,772,774,776],{"class":210,"line":762},51,[208,764,265],{"class":251},[208,766,334],{"class":258},[208,768,337],{"class":214},[208,770,771],{"class":218}," \"---",[208,773,349],{"class":348},[208,775,352],{"class":218},[208,777,355],{"class":258},[208,779,781],{"class":210,"line":780},52,[208,782,242],{"emptyLinePlaceholder":241},[208,784,786,788,791,793,795],{"class":210,"line":785},53,[208,787,717],{"class":214},[208,789,790],{"class":258}," modern_ok ",[208,792,501],{"class":214},[208,794,584],{"class":251},[208,796,526],{"class":258},[208,798,800,802,804,806,809,811,813,815,817,819,821],{"class":210,"line":799},54,[208,801,265],{"class":251},[208,803,334],{"class":258},[208,805,337],{"class":214},[208,807,808],{"class":218}," \"modern_ok = \"",[208,810,741],{"class":214},[208,812,790],{"class":258},[208,814,337],{"class":214},[208,816,748],{"class":218},[208,818,349],{"class":348},[208,820,352],{"class":218},[208,822,355],{"class":258},[208,824,826],{"class":210,"line":825},55,[208,827,242],{"emptyLinePlaceholder":241},[208,829,831,833,836],{"class":210,"line":830},56,[208,832,555],{"class":214},[208,834,835],{"class":348}," 0",[208,837,355],{"class":258},[208,839,841],{"class":210,"line":840},57,[208,842,571],{"class":258},[14,844,845,849],{},[846,847,848],"strong",{},"運行結果","：",[199,851,856],{"className":852,"code":854,"language":855,"meta":204},[853],"language-text","old resource created\nold resource used\nold_style: early return\nold_ok = false\n---\nmodern resource created\nmodern resource used\nmodern_style: early return\nmodern resource destroyed\nmodern_ok = false\n","text",[17,857,854],{"__ignoreMap":204},[14,859,860,861,864,865,867],{},"注意第一段輸出裏沒有 ",[17,862,863],{},"old resource destroyed","，這就是手動 ",[17,866,19],{}," 在複雜路徑下最容易出的錯。",[184,869,871],{"id":870},"示例-2unique_ptr-的獨佔所有權和轉移","示例 2：unique_ptr 的獨佔所有權和轉移",[14,873,874,876],{},[17,875,155],{}," 不能複製，只能移動。移動之後，原來的指針會變成空指針。",[199,878,880],{"className":201,"code":879,"language":203,"meta":204,"style":204},"#include \u003Ciostream>\n#include \u003Cmemory>\n#include \u003Cstring>\n#include \u003Cutility>\n\nclass Student\n{\n    std::string name_;\n\npublic:\n    explicit Student(const std::string& name) : name_(name)\n    {\n        std::cout \u003C\u003C \"Student \" \u003C\u003C name_ \u003C\u003C \" created\\n\";\n    }\n\n    ~Student()\n    {\n        std::cout \u003C\u003C \"Student \" \u003C\u003C name_ \u003C\u003C \" destroyed\\n\";\n    }\n\n    const std::string& name() const\n    {\n        return name_;\n    }\n};\n\n\u002F\u002F 智能指针负责管理对象生命周期，减少手动释放资源的风险。\nvoid take_ownership(std::unique_ptr\u003CStudent> student)\n{\n    std::cout \u003C\u003C \"take ownership of \" \u003C\u003C student->name() \u003C\u003C \"\\n\";\n}\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    auto p = std::make_unique\u003CStudent>(\"Alice\");\n\n    auto owner = std::move(p);\n    std::cout \u003C\u003C \"p is null? \" \u003C\u003C (p == nullptr ? \"yes\" : \"no\") \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"owner has \" \u003C\u003C owner->name() \u003C\u003C \"\\n\";\n\n    take_ownership(std::move(owner));\n    std::cout \u003C\u003C \"owner is null? \" \u003C\u003C (owner == nullptr ? \"yes\" : \"no\") \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[17,881,882,888,894,900,907,911,918,922,928,932,936,963,967,992,996,1000,1007,1011,1035,1039,1043,1062,1066,1074,1078,1082,1086,1091,1122,1126,1157,1161,1165,1173,1177,1182,1208,1212,1231,1278,1308,1312,1328,1368,1372,1380],{"__ignoreMap":204},[208,883,884,886],{"class":210,"line":211},[208,885,215],{"class":214},[208,887,219],{"class":218},[208,889,890,892],{"class":210,"line":222},[208,891,215],{"class":214},[208,893,227],{"class":218},[208,895,896,898],{"class":210,"line":230},[208,897,215],{"class":214},[208,899,235],{"class":218},[208,901,902,904],{"class":210,"line":238},[208,903,215],{"class":214},[208,905,906],{"class":218}," \u003Cutility>\n",[208,908,909],{"class":210,"line":245},[208,910,242],{"emptyLinePlaceholder":241},[208,912,913,915],{"class":210,"line":255},[208,914,248],{"class":214},[208,916,917],{"class":251}," Student\n",[208,919,920],{"class":210,"line":262},[208,921,259],{"class":258},[208,923,924,926],{"class":210,"line":271},[208,925,265],{"class":251},[208,927,268],{"class":258},[208,929,930],{"class":210,"line":276},[208,931,242],{"emptyLinePlaceholder":241},[208,933,934],{"class":210,"line":282},[208,935,279],{"class":214},[208,937,938,940,943,945,947,949,951,953,955,957,959,961],{"class":210,"line":322},[208,939,285],{"class":214},[208,941,942],{"class":251}," Student",[208,944,291],{"class":258},[208,946,294],{"class":214},[208,948,297],{"class":251},[208,950,300],{"class":258},[208,952,303],{"class":251},[208,954,306],{"class":214},[208,956,310],{"class":309},[208,958,313],{"class":258},[208,960,316],{"class":251},[208,962,319],{"class":258},[208,964,965],{"class":210,"line":328},[208,966,325],{"class":258},[208,968,969,971,973,975,978,980,982,984,986,988,990],{"class":210,"line":358},[208,970,331],{"class":251},[208,972,334],{"class":258},[208,974,337],{"class":214},[208,976,977],{"class":218}," \"Student \"",[208,979,741],{"class":214},[208,981,340],{"class":258},[208,983,337],{"class":214},[208,985,345],{"class":218},[208,987,349],{"class":348},[208,989,352],{"class":218},[208,991,355],{"class":258},[208,993,994],{"class":210,"line":364},[208,995,361],{"class":258},[208,997,998],{"class":210,"line":369},[208,999,242],{"emptyLinePlaceholder":241},[208,1001,1002,1005],{"class":210,"line":378},[208,1003,1004],{"class":251},"    ~Student",[208,1006,375],{"class":258},[208,1008,1009],{"class":210,"line":383},[208,1010,325],{"class":258},[208,1012,1013,1015,1017,1019,1021,1023,1025,1027,1029,1031,1033],{"class":210,"line":405},[208,1014,331],{"class":251},[208,1016,334],{"class":258},[208,1018,337],{"class":214},[208,1020,977],{"class":218},[208,1022,741],{"class":214},[208,1024,340],{"class":258},[208,1026,337],{"class":214},[208,1028,396],{"class":218},[208,1030,349],{"class":348},[208,1032,352],{"class":218},[208,1034,355],{"class":258},[208,1036,1037],{"class":210,"line":410},[208,1038,361],{"class":258},[208,1040,1041],{"class":210,"line":415},[208,1042,242],{"emptyLinePlaceholder":241},[208,1044,1045,1048,1050,1052,1054,1056,1058,1060],{"class":210,"line":430},[208,1046,1047],{"class":214},"    const",[208,1049,297],{"class":251},[208,1051,300],{"class":258},[208,1053,303],{"class":251},[208,1055,306],{"class":214},[208,1057,310],{"class":251},[208,1059,424],{"class":258},[208,1061,427],{"class":214},[208,1063,1064],{"class":210,"line":435},[208,1065,325],{"class":258},[208,1067,1068,1071],{"class":210,"line":457},[208,1069,1070],{"class":214},"        return",[208,1072,1073],{"class":258}," name_;\n",[208,1075,1076],{"class":210,"line":462},[208,1077,361],{"class":258},[208,1079,1080],{"class":210,"line":468},[208,1081,465],{"class":258},[208,1083,1084],{"class":210,"line":473},[208,1085,242],{"emptyLinePlaceholder":241},[208,1087,1088],{"class":210,"line":484},[208,1089,1090],{"class":564},"\u002F\u002F 智能指针负责管理对象生命周期，减少手动释放资源的风险。\n",[208,1092,1093,1096,1099,1101,1104,1106,1108,1110,1113,1116,1119],{"class":210,"line":489},[208,1094,1095],{"class":214},"void",[208,1097,1098],{"class":251}," take_ownership",[208,1100,291],{"class":258},[208,1102,1103],{"class":251},"std",[208,1105,300],{"class":258},[208,1107,155],{"class":251},[208,1109,611],{"class":258},[208,1111,1112],{"class":251},"Student",[208,1114,1115],{"class":258},"> ",[208,1117,1118],{"class":309},"student",[208,1120,1121],{"class":258},")\n",[208,1123,1124],{"class":210,"line":517},[208,1125,259],{"class":258},[208,1127,1128,1130,1132,1134,1137,1139,1142,1145,1147,1149,1151,1153,1155],{"class":210,"line":529},[208,1129,265],{"class":251},[208,1131,334],{"class":258},[208,1133,337],{"class":214},[208,1135,1136],{"class":218}," \"take ownership of \"",[208,1138,741],{"class":214},[208,1140,1141],{"class":258}," student->",[208,1143,1144],{"class":251},"name",[208,1146,424],{"class":258},[208,1148,337],{"class":214},[208,1150,748],{"class":218},[208,1152,349],{"class":348},[208,1154,352],{"class":218},[208,1156,355],{"class":258},[208,1158,1159],{"class":210,"line":534},[208,1160,571],{"class":258},[208,1162,1163],{"class":210,"line":552},[208,1164,242],{"emptyLinePlaceholder":241},[208,1166,1167,1169,1171],{"class":210,"line":568},[208,1168,682],{"class":214},[208,1170,685],{"class":251},[208,1172,375],{"class":258},[208,1174,1175],{"class":210,"line":574},[208,1176,259],{"class":258},[208,1178,1179],{"class":210,"line":579},[208,1180,1181],{"class":564},"    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n",[208,1183,1184,1186,1189,1191,1193,1195,1197,1199,1201,1203,1206],{"class":210,"line":589},[208,1185,597],{"class":214},[208,1187,1188],{"class":258}," p ",[208,1190,501],{"class":214},[208,1192,297],{"class":251},[208,1194,300],{"class":258},[208,1196,608],{"class":251},[208,1198,611],{"class":258},[208,1200,1112],{"class":251},[208,1202,617],{"class":258},[208,1204,1205],{"class":218},"\"Alice\"",[208,1207,514],{"class":258},[208,1209,1210],{"class":210,"line":594},[208,1211,242],{"emptyLinePlaceholder":241},[208,1213,1214,1216,1219,1221,1223,1225,1228],{"class":210,"line":625},[208,1215,597],{"class":214},[208,1217,1218],{"class":258}," owner ",[208,1220,501],{"class":214},[208,1222,297],{"class":251},[208,1224,300],{"class":258},[208,1226,1227],{"class":251},"move",[208,1229,1230],{"class":258},"(p);\n",[208,1232,1233,1235,1237,1239,1242,1244,1247,1250,1253,1256,1259,1262,1265,1268,1270,1272,1274,1276],{"class":210,"line":634},[208,1234,265],{"class":251},[208,1236,334],{"class":258},[208,1238,337],{"class":214},[208,1240,1241],{"class":218}," \"p is null? \"",[208,1243,741],{"class":214},[208,1245,1246],{"class":258}," (p ",[208,1248,1249],{"class":214},"==",[208,1251,1252],{"class":348}," nullptr",[208,1254,1255],{"class":214}," ?",[208,1257,1258],{"class":218}," \"yes\"",[208,1260,1261],{"class":214}," :",[208,1263,1264],{"class":218}," \"no\"",[208,1266,1267],{"class":258},") ",[208,1269,337],{"class":214},[208,1271,748],{"class":218},[208,1273,349],{"class":348},[208,1275,352],{"class":218},[208,1277,355],{"class":258},[208,1279,1280,1282,1284,1286,1289,1291,1294,1296,1298,1300,1302,1304,1306],{"class":210,"line":639},[208,1281,265],{"class":251},[208,1283,334],{"class":258},[208,1285,337],{"class":214},[208,1287,1288],{"class":218}," \"owner has \"",[208,1290,741],{"class":214},[208,1292,1293],{"class":258}," owner->",[208,1295,1144],{"class":251},[208,1297,424],{"class":258},[208,1299,337],{"class":214},[208,1301,748],{"class":218},[208,1303,349],{"class":348},[208,1305,352],{"class":218},[208,1307,355],{"class":258},[208,1309,1310],{"class":210,"line":657},[208,1311,242],{"emptyLinePlaceholder":241},[208,1313,1314,1317,1319,1321,1323,1325],{"class":210,"line":669},[208,1315,1316],{"class":251},"    take_ownership",[208,1318,291],{"class":258},[208,1320,1103],{"class":251},[208,1322,300],{"class":258},[208,1324,1227],{"class":251},[208,1326,1327],{"class":258},"(owner));\n",[208,1329,1330,1332,1334,1336,1339,1341,1344,1346,1348,1350,1352,1354,1356,1358,1360,1362,1364,1366],{"class":210,"line":674},[208,1331,265],{"class":251},[208,1333,334],{"class":258},[208,1335,337],{"class":214},[208,1337,1338],{"class":218}," \"owner is null? \"",[208,1340,741],{"class":214},[208,1342,1343],{"class":258}," (owner ",[208,1345,1249],{"class":214},[208,1347,1252],{"class":348},[208,1349,1255],{"class":214},[208,1351,1258],{"class":218},[208,1353,1261],{"class":214},[208,1355,1264],{"class":218},[208,1357,1267],{"class":258},[208,1359,337],{"class":214},[208,1361,748],{"class":218},[208,1363,349],{"class":348},[208,1365,352],{"class":218},[208,1367,355],{"class":258},[208,1369,1370],{"class":210,"line":679},[208,1371,242],{"emptyLinePlaceholder":241},[208,1373,1374,1376,1378],{"class":210,"line":690},[208,1375,555],{"class":214},[208,1377,835],{"class":348},[208,1379,355],{"class":258},[208,1381,1382],{"class":210,"line":695},[208,1383,571],{"class":258},[14,1385,1386,849],{},[846,1387,848],{},[199,1389,1392],{"className":1390,"code":1391,"language":855,"meta":204},[853],"Student Alice created\np is null? yes\nowner has Alice\ntake ownership of Alice\nStudent Alice destroyed\nowner is null? yes\n",[17,1393,1391],{"__ignoreMap":204},[184,1395,1397],{"id":1396},"示例-3shared_ptr-的共享所有權","示例 3：shared_ptr 的共享所有權",[14,1399,1400,1402,1403,1405,1406,1409],{},[17,1401,92],{}," 通過引用計數管理對象。最後一個 ",[17,1404,92],{}," 銷燬或 ",[17,1407,1408],{},"reset"," 後，對象纔會釋放。",[199,1411,1413],{"className":201,"code":1412,"language":203,"meta":204,"style":204},"#include \u003Ciostream>\n#include \u003Cmemory>\n#include \u003Cstring>\n\nclass File\n{\n    std::string name_;\n\npublic:\n    explicit File(const std::string& name) : name_(name)\n    {\n        std::cout \u003C\u003C \"File \" \u003C\u003C name_ \u003C\u003C \" opened\\n\";\n    }\n\n    ~File()\n    {\n        std::cout \u003C\u003C \"File \" \u003C\u003C name_ \u003C\u003C \" closed\\n\";\n    }\n\n    void read() const\n    {\n        std::cout \u003C\u003C \"read from \" \u003C\u003C name_ \u003C\u003C \"\\n\";\n    }\n};\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    \u002F\u002F 智能指针负责管理对象生命周期，减少手动释放资源的风险。\n    auto file1 = std::make_shared\u003CFile>(\"log.txt\");\n    std::cout \u003C\u003C \"count after create = \" \u003C\u003C file1.use_count() \u003C\u003C \"\\n\";\n\n    {\n        auto file2 = file1;\n        std::cout \u003C\u003C \"count in scope = \" \u003C\u003C file1.use_count() \u003C\u003C \"\\n\";\n        file2->read();\n    }\n\n    std::cout \u003C\u003C \"count after scope = \" \u003C\u003C file1.use_count() \u003C\u003C \"\\n\";\n\n    file1.reset();\n    std::cout \u003C\u003C \"file1 is empty? \" \u003C\u003C (file1 == nullptr ? \"yes\" : \"no\") \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[17,1414,1415,1421,1427,1433,1437,1444,1448,1454,1458,1462,1489,1493,1519,1523,1527,1534,1538,1563,1567,1571,1582,1586,1611,1615,1619,1623,1631,1635,1639,1644,1672,1703,1707,1711,1724,1753,1763,1767,1771,1800,1804,1813,1853,1857,1865],{"__ignoreMap":204},[208,1416,1417,1419],{"class":210,"line":211},[208,1418,215],{"class":214},[208,1420,219],{"class":218},[208,1422,1423,1425],{"class":210,"line":222},[208,1424,215],{"class":214},[208,1426,227],{"class":218},[208,1428,1429,1431],{"class":210,"line":230},[208,1430,215],{"class":214},[208,1432,235],{"class":218},[208,1434,1435],{"class":210,"line":238},[208,1436,242],{"emptyLinePlaceholder":241},[208,1438,1439,1441],{"class":210,"line":245},[208,1440,248],{"class":214},[208,1442,1443],{"class":251}," File\n",[208,1445,1446],{"class":210,"line":255},[208,1447,259],{"class":258},[208,1449,1450,1452],{"class":210,"line":262},[208,1451,265],{"class":251},[208,1453,268],{"class":258},[208,1455,1456],{"class":210,"line":271},[208,1457,242],{"emptyLinePlaceholder":241},[208,1459,1460],{"class":210,"line":276},[208,1461,279],{"class":214},[208,1463,1464,1466,1469,1471,1473,1475,1477,1479,1481,1483,1485,1487],{"class":210,"line":282},[208,1465,285],{"class":214},[208,1467,1468],{"class":251}," File",[208,1470,291],{"class":258},[208,1472,294],{"class":214},[208,1474,297],{"class":251},[208,1476,300],{"class":258},[208,1478,303],{"class":251},[208,1480,306],{"class":214},[208,1482,310],{"class":309},[208,1484,313],{"class":258},[208,1486,316],{"class":251},[208,1488,319],{"class":258},[208,1490,1491],{"class":210,"line":322},[208,1492,325],{"class":258},[208,1494,1495,1497,1499,1501,1504,1506,1508,1510,1513,1515,1517],{"class":210,"line":328},[208,1496,331],{"class":251},[208,1498,334],{"class":258},[208,1500,337],{"class":214},[208,1502,1503],{"class":218}," \"File \"",[208,1505,741],{"class":214},[208,1507,340],{"class":258},[208,1509,337],{"class":214},[208,1511,1512],{"class":218}," \" opened",[208,1514,349],{"class":348},[208,1516,352],{"class":218},[208,1518,355],{"class":258},[208,1520,1521],{"class":210,"line":358},[208,1522,361],{"class":258},[208,1524,1525],{"class":210,"line":364},[208,1526,242],{"emptyLinePlaceholder":241},[208,1528,1529,1532],{"class":210,"line":369},[208,1530,1531],{"class":251},"    ~File",[208,1533,375],{"class":258},[208,1535,1536],{"class":210,"line":378},[208,1537,325],{"class":258},[208,1539,1540,1542,1544,1546,1548,1550,1552,1554,1557,1559,1561],{"class":210,"line":383},[208,1541,331],{"class":251},[208,1543,334],{"class":258},[208,1545,337],{"class":214},[208,1547,1503],{"class":218},[208,1549,741],{"class":214},[208,1551,340],{"class":258},[208,1553,337],{"class":214},[208,1555,1556],{"class":218}," \" closed",[208,1558,349],{"class":348},[208,1560,352],{"class":218},[208,1562,355],{"class":258},[208,1564,1565],{"class":210,"line":405},[208,1566,361],{"class":258},[208,1568,1569],{"class":210,"line":410},[208,1570,242],{"emptyLinePlaceholder":241},[208,1572,1573,1575,1578,1580],{"class":210,"line":415},[208,1574,418],{"class":214},[208,1576,1577],{"class":251}," read",[208,1579,424],{"class":258},[208,1581,427],{"class":214},[208,1583,1584],{"class":210,"line":430},[208,1585,325],{"class":258},[208,1587,1588,1590,1592,1594,1597,1599,1601,1603,1605,1607,1609],{"class":210,"line":435},[208,1589,331],{"class":251},[208,1591,334],{"class":258},[208,1593,337],{"class":214},[208,1595,1596],{"class":218}," \"read from \"",[208,1598,741],{"class":214},[208,1600,340],{"class":258},[208,1602,337],{"class":214},[208,1604,748],{"class":218},[208,1606,349],{"class":348},[208,1608,352],{"class":218},[208,1610,355],{"class":258},[208,1612,1613],{"class":210,"line":457},[208,1614,361],{"class":258},[208,1616,1617],{"class":210,"line":462},[208,1618,465],{"class":258},[208,1620,1621],{"class":210,"line":468},[208,1622,242],{"emptyLinePlaceholder":241},[208,1624,1625,1627,1629],{"class":210,"line":473},[208,1626,682],{"class":214},[208,1628,685],{"class":251},[208,1630,375],{"class":258},[208,1632,1633],{"class":210,"line":484},[208,1634,259],{"class":258},[208,1636,1637],{"class":210,"line":489},[208,1638,1181],{"class":564},[208,1640,1641],{"class":210,"line":517},[208,1642,1643],{"class":564},"    \u002F\u002F 智能指针负责管理对象生命周期，减少手动释放资源的风险。\n",[208,1645,1646,1648,1651,1653,1655,1657,1660,1662,1665,1667,1670],{"class":210,"line":529},[208,1647,597],{"class":214},[208,1649,1650],{"class":258}," file1 ",[208,1652,501],{"class":214},[208,1654,297],{"class":251},[208,1656,300],{"class":258},[208,1658,1659],{"class":251},"make_shared",[208,1661,611],{"class":258},[208,1663,1664],{"class":251},"File",[208,1666,617],{"class":258},[208,1668,1669],{"class":218},"\"log.txt\"",[208,1671,514],{"class":258},[208,1673,1674,1676,1678,1680,1683,1685,1688,1691,1693,1695,1697,1699,1701],{"class":210,"line":534},[208,1675,265],{"class":251},[208,1677,334],{"class":258},[208,1679,337],{"class":214},[208,1681,1682],{"class":218}," \"count after create = \"",[208,1684,741],{"class":214},[208,1686,1687],{"class":258}," file1.",[208,1689,1690],{"class":251},"use_count",[208,1692,424],{"class":258},[208,1694,337],{"class":214},[208,1696,748],{"class":218},[208,1698,349],{"class":348},[208,1700,352],{"class":218},[208,1702,355],{"class":258},[208,1704,1705],{"class":210,"line":552},[208,1706,242],{"emptyLinePlaceholder":241},[208,1708,1709],{"class":210,"line":568},[208,1710,325],{"class":258},[208,1712,1713,1716,1719,1721],{"class":210,"line":574},[208,1714,1715],{"class":214},"        auto",[208,1717,1718],{"class":258}," file2 ",[208,1720,501],{"class":214},[208,1722,1723],{"class":258}," file1;\n",[208,1725,1726,1728,1730,1732,1735,1737,1739,1741,1743,1745,1747,1749,1751],{"class":210,"line":579},[208,1727,331],{"class":251},[208,1729,334],{"class":258},[208,1731,337],{"class":214},[208,1733,1734],{"class":218}," \"count in scope = \"",[208,1736,741],{"class":214},[208,1738,1687],{"class":258},[208,1740,1690],{"class":251},[208,1742,424],{"class":258},[208,1744,337],{"class":214},[208,1746,748],{"class":218},[208,1748,349],{"class":348},[208,1750,352],{"class":218},[208,1752,355],{"class":258},[208,1754,1755,1758,1761],{"class":210,"line":589},[208,1756,1757],{"class":258},"        file2->",[208,1759,1760],{"class":251},"read",[208,1762,526],{"class":258},[208,1764,1765],{"class":210,"line":594},[208,1766,361],{"class":258},[208,1768,1769],{"class":210,"line":625},[208,1770,242],{"emptyLinePlaceholder":241},[208,1772,1773,1775,1777,1779,1782,1784,1786,1788,1790,1792,1794,1796,1798],{"class":210,"line":634},[208,1774,265],{"class":251},[208,1776,334],{"class":258},[208,1778,337],{"class":214},[208,1780,1781],{"class":218}," \"count after scope = \"",[208,1783,741],{"class":214},[208,1785,1687],{"class":258},[208,1787,1690],{"class":251},[208,1789,424],{"class":258},[208,1791,337],{"class":214},[208,1793,748],{"class":218},[208,1795,349],{"class":348},[208,1797,352],{"class":218},[208,1799,355],{"class":258},[208,1801,1802],{"class":210,"line":639},[208,1803,242],{"emptyLinePlaceholder":241},[208,1805,1806,1809,1811],{"class":210,"line":657},[208,1807,1808],{"class":258},"    file1.",[208,1810,1408],{"class":251},[208,1812,526],{"class":258},[208,1814,1815,1817,1819,1821,1824,1826,1829,1831,1833,1835,1837,1839,1841,1843,1845,1847,1849,1851],{"class":210,"line":669},[208,1816,265],{"class":251},[208,1818,334],{"class":258},[208,1820,337],{"class":214},[208,1822,1823],{"class":218}," \"file1 is empty? \"",[208,1825,741],{"class":214},[208,1827,1828],{"class":258}," (file1 ",[208,1830,1249],{"class":214},[208,1832,1252],{"class":348},[208,1834,1255],{"class":214},[208,1836,1258],{"class":218},[208,1838,1261],{"class":214},[208,1840,1264],{"class":218},[208,1842,1267],{"class":258},[208,1844,337],{"class":214},[208,1846,748],{"class":218},[208,1848,349],{"class":348},[208,1850,352],{"class":218},[208,1852,355],{"class":258},[208,1854,1855],{"class":210,"line":674},[208,1856,242],{"emptyLinePlaceholder":241},[208,1858,1859,1861,1863],{"class":210,"line":679},[208,1860,555],{"class":214},[208,1862,835],{"class":348},[208,1864,355],{"class":258},[208,1866,1867],{"class":210,"line":690},[208,1868,571],{"class":258},[14,1870,1871,849],{},[846,1872,848],{},[199,1874,1877],{"className":1875,"code":1876,"language":855,"meta":204},[853],"File log.txt opened\ncount after create = 1\ncount in scope = 2\nread from log.txt\ncount after scope = 1\nFile log.txt closed\nfile1 is empty? yes\n",[17,1878,1876],{"__ignoreMap":204},[14,1880,1881,1883,1884,137],{},[17,1882,92],{}," 很方便，但不是\"更安全的默認指針\"。它有引用計數開銷，也會讓所有權關係變複雜。默認優先考慮 ",[17,1885,155],{},[184,1887,1889],{"id":1888},"示例-4weak_ptr-打破-shared_ptr-循環引用","示例 4：weak_ptr 打破 shared_ptr 循環引用",[14,1891,1892,1893,1895,1896,1898,1899,137],{},"如果兩個對象互相用 ",[17,1894,92],{}," 指向對方，它們的引用計數可能永遠不會歸零。常見做法是：主要方向用 ",[17,1897,92],{},"，反向觀察關係用 ",[17,1900,175],{},[199,1902,1904],{"className":201,"code":1903,"language":203,"meta":204,"style":204},"#include \u003Ciostream>\n#include \u003Cmemory>\n#include \u003Cstring>\n\nclass Node\n{\npublic:\n    std::string name;\n    std::shared_ptr\u003CNode> next;\n    std::weak_ptr\u003CNode> prev;\n\n    explicit Node(const std::string& n) : name(n)\n    {\n        std::cout \u003C\u003C \"Node \" \u003C\u003C name \u003C\u003C \" created\\n\";\n    }\n\n    ~Node()\n    {\n        std::cout \u003C\u003C \"Node \" \u003C\u003C name \u003C\u003C \" destroyed\\n\";\n    }\n};\n\nint main()\n{\n    auto a = std::make_shared\u003CNode>(\"A\");\n    auto b = std::make_shared\u003CNode>(\"B\");\n\n    a->next = b; \u002F\u002F A 拥有下一个节点\n    b->prev = a; \u002F\u002F B 只观察前一个节点，不增加 A 的引用计数\n\n    std::cout \u003C\u003C \"a count = \" \u003C\u003C a.use_count() \u003C\u003C \"\\n\";\n    std::cout \u003C\u003C \"b count = \" \u003C\u003C b.use_count() \u003C\u003C \"\\n\";\n\n    if (auto p = b->prev.lock())\n    {\n        std::cout \u003C\u003C \"B prev is \" \u003C\u003C p->name \u003C\u003C \"\\n\";\n    }\n\n    return 0;\n}\n",[17,1905,1906,1912,1918,1924,1928,1935,1939,1943,1950,1968,1984,1988,2017,2021,2047,2051,2055,2062,2066,2090,2094,2098,2102,2110,2114,2140,2166,2170,2183,2196,2200,2230,2260,2264,2288,2292,2318,2322,2326,2334],{"__ignoreMap":204},[208,1907,1908,1910],{"class":210,"line":211},[208,1909,215],{"class":214},[208,1911,219],{"class":218},[208,1913,1914,1916],{"class":210,"line":222},[208,1915,215],{"class":214},[208,1917,227],{"class":218},[208,1919,1920,1922],{"class":210,"line":230},[208,1921,215],{"class":214},[208,1923,235],{"class":218},[208,1925,1926],{"class":210,"line":238},[208,1927,242],{"emptyLinePlaceholder":241},[208,1929,1930,1932],{"class":210,"line":245},[208,1931,248],{"class":214},[208,1933,1934],{"class":251}," Node\n",[208,1936,1937],{"class":210,"line":255},[208,1938,259],{"class":258},[208,1940,1941],{"class":210,"line":262},[208,1942,279],{"class":214},[208,1944,1945,1947],{"class":210,"line":271},[208,1946,265],{"class":251},[208,1948,1949],{"class":258},"::string name;\n",[208,1951,1952,1954,1957,1959,1962,1965],{"class":210,"line":276},[208,1953,265],{"class":251},[208,1955,1956],{"class":258},"::shared_ptr",[208,1958,611],{"class":214},[208,1960,1961],{"class":258},"Node",[208,1963,1964],{"class":214},">",[208,1966,1967],{"class":258}," next;\n",[208,1969,1970,1972,1975,1977,1979,1981],{"class":210,"line":282},[208,1971,265],{"class":251},[208,1973,1974],{"class":258},"::weak_ptr",[208,1976,611],{"class":214},[208,1978,1961],{"class":258},[208,1980,1964],{"class":214},[208,1982,1983],{"class":258}," prev;\n",[208,1985,1986],{"class":210,"line":322},[208,1987,242],{"emptyLinePlaceholder":241},[208,1989,1990,1992,1995,1997,1999,2001,2003,2005,2007,2010,2012,2014],{"class":210,"line":328},[208,1991,285],{"class":214},[208,1993,1994],{"class":251}," Node",[208,1996,291],{"class":258},[208,1998,294],{"class":214},[208,2000,297],{"class":251},[208,2002,300],{"class":258},[208,2004,303],{"class":251},[208,2006,306],{"class":214},[208,2008,2009],{"class":309}," n",[208,2011,313],{"class":258},[208,2013,1144],{"class":251},[208,2015,2016],{"class":258},"(n)\n",[208,2018,2019],{"class":210,"line":358},[208,2020,325],{"class":258},[208,2022,2023,2025,2027,2029,2032,2034,2037,2039,2041,2043,2045],{"class":210,"line":364},[208,2024,331],{"class":251},[208,2026,334],{"class":258},[208,2028,337],{"class":214},[208,2030,2031],{"class":218}," \"Node \"",[208,2033,741],{"class":214},[208,2035,2036],{"class":258}," name ",[208,2038,337],{"class":214},[208,2040,345],{"class":218},[208,2042,349],{"class":348},[208,2044,352],{"class":218},[208,2046,355],{"class":258},[208,2048,2049],{"class":210,"line":369},[208,2050,361],{"class":258},[208,2052,2053],{"class":210,"line":378},[208,2054,242],{"emptyLinePlaceholder":241},[208,2056,2057,2060],{"class":210,"line":383},[208,2058,2059],{"class":251},"    ~Node",[208,2061,375],{"class":258},[208,2063,2064],{"class":210,"line":405},[208,2065,325],{"class":258},[208,2067,2068,2070,2072,2074,2076,2078,2080,2082,2084,2086,2088],{"class":210,"line":410},[208,2069,331],{"class":251},[208,2071,334],{"class":258},[208,2073,337],{"class":214},[208,2075,2031],{"class":218},[208,2077,741],{"class":214},[208,2079,2036],{"class":258},[208,2081,337],{"class":214},[208,2083,396],{"class":218},[208,2085,349],{"class":348},[208,2087,352],{"class":218},[208,2089,355],{"class":258},[208,2091,2092],{"class":210,"line":415},[208,2093,361],{"class":258},[208,2095,2096],{"class":210,"line":430},[208,2097,465],{"class":258},[208,2099,2100],{"class":210,"line":435},[208,2101,242],{"emptyLinePlaceholder":241},[208,2103,2104,2106,2108],{"class":210,"line":457},[208,2105,682],{"class":214},[208,2107,685],{"class":251},[208,2109,375],{"class":258},[208,2111,2112],{"class":210,"line":462},[208,2113,259],{"class":258},[208,2115,2116,2118,2121,2123,2125,2127,2129,2131,2133,2135,2138],{"class":210,"line":468},[208,2117,597],{"class":214},[208,2119,2120],{"class":258}," a ",[208,2122,501],{"class":214},[208,2124,297],{"class":251},[208,2126,300],{"class":258},[208,2128,1659],{"class":251},[208,2130,611],{"class":258},[208,2132,1961],{"class":251},[208,2134,617],{"class":258},[208,2136,2137],{"class":218},"\"A\"",[208,2139,514],{"class":258},[208,2141,2142,2144,2147,2149,2151,2153,2155,2157,2159,2161,2164],{"class":210,"line":473},[208,2143,597],{"class":214},[208,2145,2146],{"class":258}," b ",[208,2148,501],{"class":214},[208,2150,297],{"class":251},[208,2152,300],{"class":258},[208,2154,1659],{"class":251},[208,2156,611],{"class":258},[208,2158,1961],{"class":251},[208,2160,617],{"class":258},[208,2162,2163],{"class":218},"\"B\"",[208,2165,514],{"class":258},[208,2167,2168],{"class":210,"line":484},[208,2169,242],{"emptyLinePlaceholder":241},[208,2171,2172,2175,2177,2180],{"class":210,"line":489},[208,2173,2174],{"class":258},"    a->next ",[208,2176,501],{"class":214},[208,2178,2179],{"class":258}," b;",[208,2181,2182],{"class":564}," \u002F\u002F A 拥有下一个节点\n",[208,2184,2185,2188,2190,2193],{"class":210,"line":517},[208,2186,2187],{"class":258},"    b->prev ",[208,2189,501],{"class":214},[208,2191,2192],{"class":258}," a;",[208,2194,2195],{"class":564}," \u002F\u002F B 只观察前一个节点，不增加 A 的引用计数\n",[208,2197,2198],{"class":210,"line":529},[208,2199,242],{"emptyLinePlaceholder":241},[208,2201,2202,2204,2206,2208,2211,2213,2216,2218,2220,2222,2224,2226,2228],{"class":210,"line":534},[208,2203,265],{"class":251},[208,2205,334],{"class":258},[208,2207,337],{"class":214},[208,2209,2210],{"class":218}," \"a count = \"",[208,2212,741],{"class":214},[208,2214,2215],{"class":258}," a.",[208,2217,1690],{"class":251},[208,2219,424],{"class":258},[208,2221,337],{"class":214},[208,2223,748],{"class":218},[208,2225,349],{"class":348},[208,2227,352],{"class":218},[208,2229,355],{"class":258},[208,2231,2232,2234,2236,2238,2241,2243,2246,2248,2250,2252,2254,2256,2258],{"class":210,"line":552},[208,2233,265],{"class":251},[208,2235,334],{"class":258},[208,2237,337],{"class":214},[208,2239,2240],{"class":218}," \"b count = \"",[208,2242,741],{"class":214},[208,2244,2245],{"class":258}," b.",[208,2247,1690],{"class":251},[208,2249,424],{"class":258},[208,2251,337],{"class":214},[208,2253,748],{"class":218},[208,2255,349],{"class":348},[208,2257,352],{"class":218},[208,2259,355],{"class":258},[208,2261,2262],{"class":210,"line":568},[208,2263,242],{"emptyLinePlaceholder":241},[208,2265,2266,2269,2272,2275,2277,2279,2282,2285],{"class":210,"line":574},[208,2267,2268],{"class":214},"    if",[208,2270,2271],{"class":258}," (",[208,2273,2274],{"class":214},"auto",[208,2276,1188],{"class":258},[208,2278,501],{"class":214},[208,2280,2281],{"class":258}," b->prev.",[208,2283,2284],{"class":251},"lock",[208,2286,2287],{"class":258},"())\n",[208,2289,2290],{"class":210,"line":579},[208,2291,325],{"class":258},[208,2293,2294,2296,2298,2300,2303,2305,2308,2310,2312,2314,2316],{"class":210,"line":589},[208,2295,331],{"class":251},[208,2297,334],{"class":258},[208,2299,337],{"class":214},[208,2301,2302],{"class":218}," \"B prev is \"",[208,2304,741],{"class":214},[208,2306,2307],{"class":258}," p->name ",[208,2309,337],{"class":214},[208,2311,748],{"class":218},[208,2313,349],{"class":348},[208,2315,352],{"class":218},[208,2317,355],{"class":258},[208,2319,2320],{"class":210,"line":594},[208,2321,361],{"class":258},[208,2323,2324],{"class":210,"line":625},[208,2325,242],{"emptyLinePlaceholder":241},[208,2327,2328,2330,2332],{"class":210,"line":634},[208,2329,555],{"class":214},[208,2331,835],{"class":348},[208,2333,355],{"class":258},[208,2335,2336],{"class":210,"line":639},[208,2337,571],{"class":258},[14,2339,2340,849],{},[846,2341,848],{},[199,2343,2346],{"className":2344,"code":2345,"language":855,"meta":204},[853],"Node A created\nNode B created\na count = 1\nb count = 2\nB prev is A\nNode A destroyed\nNode B destroyed\n",[17,2347,2345],{"__ignoreMap":204},[14,2349,2350,2352,2353,2356,2357,2359,2360,2362],{},[17,2351,175],{}," 不能直接訪問對象，需要先調用 ",[17,2354,2355],{},"lock()","。如果對象還活着，",[17,2358,2355],{}," 返回一個臨時 ",[17,2361,92],{},"；如果對象已經釋放，返回空指針。",[2364,2365,2366],"h4",{"id":2366},"這個例子表達了什麼關係",[14,2368,2369],{},"這段代碼可以看成一個只有兩個節點的雙向鏈表：",[199,2371,2374],{"className":2372,"code":2373,"language":855,"meta":204},[853],"A  ----next---->  B\nA  \u003C---prev-----  B\n",[17,2375,2373],{"__ignoreMap":204},[14,2377,2378,2379,849],{},"雖然兩個節點都能找到對方，但兩個方向的",[846,2380,2381],{},"所有權含義並不相同",[102,2383,2384,2404],{},[105,2385,2386,2389,2390,2393,2394,2397,2398,2400,2401,137],{},[17,2387,2388],{},"A"," 通過 ",[17,2391,2392],{},"next"," 擁有 ",[17,2395,2396],{},"B","，因此 ",[17,2399,2392],{}," 使用 ",[17,2402,2403],{},"std::shared_ptr\u003CNode>",[105,2405,2406,2389,2408,2411,2412,2414,2415,2417,2418,2400,2420,137],{},[17,2407,2396],{},[17,2409,2410],{},"prev"," 觀察 ",[17,2413,2388],{},"，但不負責延長 ",[17,2416,2388],{}," 的生命週期，因此 ",[17,2419,2410],{},[17,2421,2422],{},"std::weak_ptr\u003CNode>",[14,2424,2425],{},"可以把它簡單理解爲：",[102,2427,2428,2433],{},[105,2429,2430,2432],{},[17,2431,92],{}," 表示“我擁有這個對象，它暫時不能被銷燬”。",[105,2434,2435,2437],{},[17,2436,175],{}," 表示“我知道這個對象在哪裏，但我不負責讓它繼續存活”。",[2364,2439,2440],{"id":2440},"引用計數是怎樣變化的",[14,2442,2443],{},"剛創建兩個節點時：",[199,2445,2447],{"className":201,"code":2446,"language":203,"meta":204,"style":204},"auto a = std::make_shared\u003CNode>(\"A\");\nauto b = std::make_shared\u003CNode>(\"B\");\n",[17,2448,2449,2473],{"__ignoreMap":204},[208,2450,2451,2453,2455,2457,2459,2461,2463,2465,2467,2469,2471],{"class":210,"line":211},[208,2452,2274],{"class":214},[208,2454,2120],{"class":258},[208,2456,501],{"class":214},[208,2458,297],{"class":251},[208,2460,300],{"class":258},[208,2462,1659],{"class":251},[208,2464,611],{"class":258},[208,2466,1961],{"class":251},[208,2468,617],{"class":258},[208,2470,2137],{"class":218},[208,2472,514],{"class":258},[208,2474,2475,2477,2479,2481,2483,2485,2487,2489,2491,2493,2495],{"class":210,"line":222},[208,2476,2274],{"class":214},[208,2478,2146],{"class":258},[208,2480,501],{"class":214},[208,2482,297],{"class":251},[208,2484,300],{"class":258},[208,2486,1659],{"class":251},[208,2488,611],{"class":258},[208,2490,1961],{"class":251},[208,2492,617],{"class":258},[208,2494,2163],{"class":218},[208,2496,514],{"class":258},[14,2498,2499,2500,2393,2503,2505,2506,2393,2509,849],{},"此時 ",[17,2501,2502],{},"a",[17,2504,2388],{},"，",[17,2507,2508],{},"b",[17,2510,2396],{},[29,2512,2513,2529],{},[32,2514,2515],{},[35,2516,2517,2520,2525],{},[38,2518,2519],{"align":40},"對象",[38,2521,2522,2523],{"align":40},"擁有它的 ",[17,2524,92],{},[38,2526,2528],{"align":2527},"center","引用計數",[48,2530,2531,2544],{},[35,2532,2533,2537,2541],{},[53,2534,2535],{"align":40},[17,2536,2388],{},[53,2538,2539],{"align":40},[17,2540,2502],{},[53,2542,2543],{"align":2527},"1",[35,2545,2546,2550,2554],{},[53,2547,2548],{"align":40},[17,2549,2396],{},[53,2551,2552],{"align":40},[17,2553,2508],{},[53,2555,2543],{"align":2527},[14,2557,2558],{},"執行：",[199,2560,2562],{"className":201,"code":2561,"language":203,"meta":204,"style":204},"a->next = b;\n",[17,2563,2564],{"__ignoreMap":204},[208,2565,2566,2569,2571],{"class":210,"line":211},[208,2567,2568],{"class":258},"a->next ",[208,2570,501],{"class":214},[208,2572,2573],{"class":258}," b;\n",[14,2575,2576,2579,2580,2582,2583,2585,2586,2588,2589,2591],{},[17,2577,2578],{},"a->next"," 也是一個 ",[17,2581,92],{},"，它和 ",[17,2584,2508],{}," 共同擁有 ",[17,2587,2396],{},"，所以 ",[17,2590,2396],{}," 的引用計數由 1 變成 2。",[14,2593,2594],{},"接着執行：",[199,2596,2598],{"className":201,"code":2597,"language":203,"meta":204,"style":204},"b->prev = a;\n",[17,2599,2600],{"__ignoreMap":204},[208,2601,2602,2605,2607],{"class":210,"line":211},[208,2603,2604],{"class":258},"b->prev ",[208,2606,501],{"class":214},[208,2608,2609],{"class":258}," a;\n",[14,2611,2612,2615,2616,2618,2619,2621],{},[17,2613,2614],{},"b->prev"," 是 ",[17,2617,175],{},"，只觀察 ",[17,2620,2388],{},"，不會增加引用計數。因此最終輸出爲：",[199,2623,2626],{"className":2624,"code":2625,"language":855,"meta":204},[853],"a count = 1\nb count = 2\n",[17,2627,2625],{"__ignoreMap":204},[14,2629,2630],{},"對應關係是：",[29,2632,2633,2645],{},[32,2634,2635],{},[35,2636,2637,2639,2643],{},[38,2638,2519],{"align":40},[38,2640,2522,2641],{"align":40},[17,2642,92],{},[38,2644,2528],{"align":2527},[48,2646,2647,2659],{},[35,2648,2649,2653,2657],{},[53,2650,2651],{"align":40},[17,2652,2388],{},[53,2654,2655],{"align":40},[17,2656,2502],{},[53,2658,2543],{"align":2527},[35,2660,2661,2665,2672],{},[53,2662,2663],{"align":40},[17,2664,2396],{},[53,2666,2667,2669,2670],{"align":40},[17,2668,2508],{},"、",[17,2671,2578],{},[53,2673,2674],{"align":2527},"2",[2364,2676,2678],{"id":2677},"爲什麼反向指針不能也使用-shared_ptr","爲什麼反向指針不能也使用 shared_ptr",[14,2680,2681],{},"假設把成員改成：",[199,2683,2685],{"className":201,"code":2684,"language":203,"meta":204,"style":204},"std::shared_ptr\u003CNode> prev;\n",[17,2686,2687],{"__ignoreMap":204},[208,2688,2689,2691,2693,2695,2697,2699],{"class":210,"line":211},[208,2690,1103],{"class":251},[208,2692,1956],{"class":258},[208,2694,611],{"class":214},[208,2696,1961],{"class":258},[208,2698,1964],{"class":214},[208,2700,1983],{"class":258},[14,2702,2703,2704,2389,2706,2393,2708,2505,2710,2712,2713,2393,2715,849],{},"那麼 ",[17,2705,2388],{},[17,2707,2392],{},[17,2709,2396],{},[17,2711,2396],{}," 又通過 ",[17,2714,2410],{},[17,2716,2388],{},[199,2718,2721],{"className":2719,"code":2720,"language":855,"meta":204},[853],"A  ----shared_ptr---->  B\nA  \u003C---shared_ptr----  B\n",[17,2722,2720],{"__ignoreMap":204},[14,2724,2725,2726,2729,2730,2732,2733,2735],{},"當 ",[17,2727,2728],{},"main()"," 結束時，局部變量 ",[17,2731,2502],{}," 和 ",[17,2734,2508],{}," 雖然會銷燬，但兩個節點內部仍然互相持有：",[199,2737,2740],{"className":2738,"code":2739,"language":855,"meta":204},[853],"A 的引用计数至少为 1：来自 B.prev\nB 的引用计数至少为 1：来自 A.next\n",[17,2741,2739],{"__ignoreMap":204},[14,2743,2744,2745,2747,2748,137],{},"它們的引用計數都無法降到 0，因此兩個對象都不會析構，這就是 ",[17,2746,92],{}," 的",[846,2749,2750],{},"循環引用問題",[14,2752,2753,2754,2756,2757,2760,2761,2763],{},"使用 ",[17,2755,175],{}," 作爲反向指針後，",[17,2758,2759],{},"B.prev"," 不參與 ",[17,2762,2388],{}," 的引用計數，循環所有權被打破，對象便可以正常釋放。",[2364,2765,2767],{"id":2766},"lock-的作用是什麼","lock() 的作用是什麼",[14,2769,2770,2772],{},[17,2771,175],{}," 不擁有對象，因此它不能保證自己觀察的對象仍然存在。也正因爲如此，不能直接寫：",[199,2774,2776],{"className":201,"code":2775,"language":203,"meta":204,"style":204},"\u002F\u002F 错误：weak_ptr 不支持直接使用 -> 访问对象\nstd::cout \u003C\u003C b->prev->name \u003C\u003C \"\\n\";\n",[17,2777,2778,2783],{"__ignoreMap":204},[208,2779,2780],{"class":210,"line":211},[208,2781,2782],{"class":564},"\u002F\u002F 错误：weak_ptr 不支持直接使用 -> 访问对象\n",[208,2784,2785,2787,2789,2791,2794,2796,2798,2800,2802],{"class":210,"line":222},[208,2786,1103],{"class":251},[208,2788,334],{"class":258},[208,2790,337],{"class":214},[208,2792,2793],{"class":258}," b->prev->name ",[208,2795,337],{"class":214},[208,2797,748],{"class":218},[208,2799,349],{"class":348},[208,2801,352],{"class":218},[208,2803,355],{"class":258},[14,2805,2806],{},"訪問前必須調用：",[199,2808,2810],{"className":201,"code":2809,"language":203,"meta":204,"style":204},"b->prev.lock()\n",[17,2811,2812],{"__ignoreMap":204},[208,2813,2814,2817,2819],{"class":210,"line":211},[208,2815,2816],{"class":258},"b->prev.",[208,2818,2284],{"class":251},[208,2820,375],{"class":258},[14,2822,2823,2825,2826,2828,2829,849],{},[17,2824,2355],{}," 會嘗試根據 ",[17,2827,175],{}," 得到一個 ",[17,2830,92],{},[102,2832,2833,2838],{},[105,2834,2835,2836,137],{},"如果對象仍然存在，返回一個有效的 ",[17,2837,92],{},[105,2839,2840,2841,137],{},"如果對象已經銷燬，返回一個空的 ",[17,2842,92],{},[14,2844,2845],{},"因此原代碼寫成：",[199,2847,2849],{"className":201,"code":2848,"language":203,"meta":204,"style":204},"if (auto p = b->prev.lock())\n{\n    std::cout \u003C\u003C \"B prev is \" \u003C\u003C p->name \u003C\u003C \"\\n\";\n}\n",[17,2850,2851,2870,2874,2898],{"__ignoreMap":204},[208,2852,2853,2856,2858,2860,2862,2864,2866,2868],{"class":210,"line":211},[208,2854,2855],{"class":214},"if",[208,2857,2271],{"class":258},[208,2859,2274],{"class":214},[208,2861,1188],{"class":258},[208,2863,501],{"class":214},[208,2865,2281],{"class":258},[208,2867,2284],{"class":251},[208,2869,2287],{"class":258},[208,2871,2872],{"class":210,"line":222},[208,2873,259],{"class":258},[208,2875,2876,2878,2880,2882,2884,2886,2888,2890,2892,2894,2896],{"class":210,"line":230},[208,2877,265],{"class":251},[208,2879,334],{"class":258},[208,2881,337],{"class":214},[208,2883,2302],{"class":218},[208,2885,741],{"class":214},[208,2887,2307],{"class":258},[208,2889,337],{"class":214},[208,2891,748],{"class":218},[208,2893,349],{"class":348},[208,2895,352],{"class":218},[208,2897,355],{"class":258},[208,2899,2900],{"class":210,"line":238},[208,2901,571],{"class":258},[14,2903,2904],{},"這段代碼可以分成三步理解：",[142,2906,2907,2918,2924],{},[105,2908,2909,2912,2913,2915,2916,137],{},[17,2910,2911],{},"b->prev.lock()"," 嘗試獲得指向 ",[17,2914,2388],{}," 的 ",[17,2917,92],{},[105,2919,2920,2921,2923],{},"返回值保存到局部變量 ",[17,2922,14],{}," 中。",[105,2925,2926,2928,2929,2931],{},[17,2927,2855],{}," 檢查 ",[17,2930,14],{}," 是否非空，只有對象仍然存在時才進入代碼塊。",[14,2933,2934,2935,2937,2938,2940,2941,2943,2944,2946,2947,2949],{},"在這個例子中，",[17,2936,2388],{}," 仍然由變量 ",[17,2939,2502],{}," 管理，所以 ",[17,2942,2355],{}," 成功，",[17,2945,14],{}," 指向 ",[17,2948,2388],{},"，可以安全訪問：",[199,2951,2953],{"className":201,"code":2952,"language":203,"meta":204,"style":204},"p->name\n",[17,2954,2955],{"__ignoreMap":204},[208,2956,2957],{"class":210,"line":211},[208,2958,2952],{"class":258},[14,2960,2961,2962,2964,2965,2397,2967,2969,2970,2972,2973,2975],{},"在 ",[17,2963,14],{}," 存活期間，它也會暫時擁有 ",[17,2966,2388],{},[17,2968,2388],{}," 的引用計數會臨時從 1 變成 2。離開 ",[17,2971,2855],{}," 代碼塊後，",[17,2974,14],{}," 被銷燬，引用計數再從 2 變回 1。",[2364,2977,2979],{"id":2978},"lock-失敗時會怎樣","lock() 失敗時會怎樣",[14,2981,2982,2983,2985,2986,2988],{},"下面的例子中，",[17,2984,2388],{}," 被銷燬以後，",[17,2987,175],{}," 本身仍然可以存在，但它已經處於過期狀態：",[199,2990,2992],{"className":201,"code":2991,"language":203,"meta":204,"style":204},"std::weak_ptr\u003CNode> observer;\n\n{\n    auto owner = std::make_shared\u003CNode>(\"A\");\n    observer = owner;\n} \u002F\u002F owner 销毁，A 的引用计数变成 0，A 被释放\n\nif (auto p = observer.lock())\n{\n    std::cout \u003C\u003C p->name \u003C\u003C \"\\n\";\n}\nelse\n{\n    std::cout \u003C\u003C \"observed object has been destroyed\\n\";\n}\n",[17,2993,2994,3009,3013,3017,3041,3051,3059,3063,3082,3086,3106,3110,3115,3119,3136],{"__ignoreMap":204},[208,2995,2996,2998,3000,3002,3004,3006],{"class":210,"line":211},[208,2997,1103],{"class":251},[208,2999,1974],{"class":258},[208,3001,611],{"class":214},[208,3003,1961],{"class":258},[208,3005,1964],{"class":214},[208,3007,3008],{"class":258}," observer;\n",[208,3010,3011],{"class":210,"line":222},[208,3012,242],{"emptyLinePlaceholder":241},[208,3014,3015],{"class":210,"line":230},[208,3016,259],{"class":258},[208,3018,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039],{"class":210,"line":238},[208,3020,597],{"class":214},[208,3022,1218],{"class":258},[208,3024,501],{"class":214},[208,3026,297],{"class":251},[208,3028,300],{"class":258},[208,3030,1659],{"class":251},[208,3032,611],{"class":258},[208,3034,1961],{"class":251},[208,3036,617],{"class":258},[208,3038,2137],{"class":218},[208,3040,514],{"class":258},[208,3042,3043,3046,3048],{"class":210,"line":245},[208,3044,3045],{"class":258},"    observer ",[208,3047,501],{"class":214},[208,3049,3050],{"class":258}," owner;\n",[208,3052,3053,3056],{"class":210,"line":255},[208,3054,3055],{"class":258},"}",[208,3057,3058],{"class":564}," \u002F\u002F owner 销毁，A 的引用计数变成 0，A 被释放\n",[208,3060,3061],{"class":210,"line":262},[208,3062,242],{"emptyLinePlaceholder":241},[208,3064,3065,3067,3069,3071,3073,3075,3078,3080],{"class":210,"line":271},[208,3066,2855],{"class":214},[208,3068,2271],{"class":258},[208,3070,2274],{"class":214},[208,3072,1188],{"class":258},[208,3074,501],{"class":214},[208,3076,3077],{"class":258}," observer.",[208,3079,2284],{"class":251},[208,3081,2287],{"class":258},[208,3083,3084],{"class":210,"line":276},[208,3085,259],{"class":258},[208,3087,3088,3090,3092,3094,3096,3098,3100,3102,3104],{"class":210,"line":282},[208,3089,265],{"class":251},[208,3091,334],{"class":258},[208,3093,337],{"class":214},[208,3095,2307],{"class":258},[208,3097,337],{"class":214},[208,3099,748],{"class":218},[208,3101,349],{"class":348},[208,3103,352],{"class":218},[208,3105,355],{"class":258},[208,3107,3108],{"class":210,"line":322},[208,3109,571],{"class":258},[208,3111,3112],{"class":210,"line":328},[208,3113,3114],{"class":214},"else\n",[208,3116,3117],{"class":210,"line":358},[208,3118,259],{"class":258},[208,3120,3121,3123,3125,3127,3130,3132,3134],{"class":210,"line":364},[208,3122,265],{"class":251},[208,3124,334],{"class":258},[208,3126,337],{"class":214},[208,3128,3129],{"class":218}," \"observed object has been destroyed",[208,3131,349],{"class":348},[208,3133,352],{"class":218},[208,3135,355],{"class":258},[208,3137,3138],{"class":210,"line":369},[208,3139,571],{"class":258},[14,3141,3142,3143,3146,3147,3149,3150,3153],{},"這時 ",[17,3144,3145],{},"observer.lock()"," 返回空的 ",[17,3148,92],{},"，程序進入 ",[17,3151,3152],{},"else","，不會訪問已經銷燬的對象。",[14,3155,3156,3157,3160],{},"也可以先使用 ",[17,3158,3159],{},"expired()"," 判斷：",[199,3162,3164],{"className":201,"code":3163,"language":203,"meta":204,"style":204},"if (!observer.expired())\n{\n    \u002F\u002F 对象可能仍然存在\n}\n",[17,3165,3166,3183,3187,3192],{"__ignoreMap":204},[208,3167,3168,3170,3172,3175,3178,3181],{"class":210,"line":211},[208,3169,2855],{"class":214},[208,3171,2271],{"class":258},[208,3173,3174],{"class":214},"!",[208,3176,3177],{"class":258},"observer.",[208,3179,3180],{"class":251},"expired",[208,3182,2287],{"class":258},[208,3184,3185],{"class":210,"line":222},[208,3186,259],{"class":258},[208,3188,3189],{"class":210,"line":230},[208,3190,3191],{"class":564},"    \u002F\u002F 对象可能仍然存在\n",[208,3193,3194],{"class":210,"line":238},[208,3195,571],{"class":258},[14,3197,3198,3199,3201,3202,3204,3205,3207,3208,3210],{},"不過需要真正訪問對象時，仍然應該直接使用 ",[17,3200,2355],{}," 並檢查返回值。因爲從調用 ",[17,3203,3159],{}," 到調用 ",[17,3206,2355],{}," 之間，對象的生命週期仍可能發生變化；",[17,3209,2355],{}," 能把“檢查對象是否存在”和“臨時取得所有權”合併爲一次安全操作。",[2364,3212,3213],{"id":3213},"程序結束時爲什麼兩個節點都能析構",[14,3215,3216,3218,3219,3221,3222,849],{},[17,3217,2728],{}," 結束時，局部變量按照創建順序的相反方向銷燬，因此先銷燬 ",[17,3220,2508],{},"，再銷燬 ",[17,3223,2502],{},[142,3225,3226,3239,3249,3260],{},[105,3227,3228,3230,3231,3233,3234,3236,3237,137],{},[17,3229,2508],{}," 銷燬後，",[17,3232,2396],{}," 的引用計數從 2 變成 1，因爲 ",[17,3235,2578],{}," 仍然擁有 ",[17,3238,2396],{},[105,3240,3241,3230,3243,3245,3246,3248],{},[17,3242,2502],{},[17,3244,2388],{}," 的引用計數從 1 變成 0，於是 ",[17,3247,2388],{}," 被析構。",[105,3250,3251,3253,3254,3256,3257,3259],{},[17,3252,2388],{}," 被銷燬時，它的成員 ",[17,3255,2392],{}," 也隨之銷燬，",[17,3258,2396],{}," 的引用計數從 1 變成 0。",[105,3261,3262,3263,3248],{},"最後 ",[17,3264,2396],{},[14,3266,3267],{},"所以最終可以看到：",[199,3269,3272],{"className":3270,"code":3271,"language":855,"meta":204},[853],"Node A destroyed\nNode B destroyed\n",[17,3273,3271],{"__ignoreMap":204},[14,3275,3276,3277],{},"這裏最關鍵的不是“前後指針必須分別使用哪一種智能指針”，而是要先判斷所有權關係：",[846,3278,3279,3280,3282,3283,137],{},"真正負責對象生命週期的一方使用 ",[17,3281,92],{},"，只負責觀察的一方使用 ",[17,3284,175],{},[184,3286,3288],{"id":3287},"示例-5函數參數不要濫用-shared_ptr","示例 5：函數參數不要濫用 shared_ptr",[14,3290,3291],{},"函數參數應該表達真實語義：",[102,3293,3294,3304,3313,3318],{},[105,3295,3296,3297,3300,3301,137],{},"只是臨時使用對象：用 ",[17,3298,3299],{},"T&"," 或 ",[17,3302,3303],{},"const T&",[105,3305,3306,3307,3300,3310,137],{},"函數可能沒有對象：用 ",[17,3308,3309],{},"T*",[17,3311,3312],{},"const T*",[105,3314,3315,3316,137],{},"函數要接管對象：用 ",[17,3317,57],{},[105,3319,3320,3321,137],{},"函數要共同擁有對象：用 ",[17,3322,70],{},[199,3324,3326],{"className":201,"code":3325,"language":203,"meta":204,"style":204},"#include \u003Ciostream>\n#include \u003Cmemory>\n#include \u003Cstring>\n#include \u003Cutility>\n\nclass Robot\n{\n    std::string name_;\n\npublic:\n    explicit Robot(std::string name) : name_(std::move(name)) {}\n\n    const std::string& name() const\n    {\n        return name_;\n    }\n};\n\nvoid print_robot(const Robot& robot)\n{\n    std::cout \u003C\u003C \"borrow: \" \u003C\u003C robot.name() \u003C\u003C \"\\n\";\n}\n\n\u002F\u002F 智能指针负责管理对象生命周期，减少手动释放资源的风险。\nvoid take_robot(std::unique_ptr\u003CRobot> robot)\n{\n    std::cout \u003C\u003C \"take: \" \u003C\u003C robot->name() \u003C\u003C \"\\n\";\n}\n\nvoid share_robot(std::shared_ptr\u003CRobot> robot)\n{\n    std::cout \u003C\u003C \"share count inside = \" \u003C\u003C robot.use_count() \u003C\u003C \"\\n\";\n}\n\nint main()\n{\n    \u002F\u002F 程序从 main 函数开始执行，下面的语句会按顺序运行。\n    auto robot = std::make_unique\u003CRobot>(\"R1\");\n    print_robot(*robot);\n    take_robot(std::move(robot));\n    std::cout \u003C\u003C \"robot is null? \" \u003C\u003C (robot == nullptr ? \"yes\" : \"no\") \u003C\u003C \"\\n\";\n\n    auto shared_robot = std::make_shared\u003CRobot>(\"R2\");\n    std::cout \u003C\u003C \"share count before = \" \u003C\u003C shared_robot.use_count() \u003C\u003C \"\\n\";\n    share_robot(shared_robot);\n    std::cout \u003C\u003C \"share count after = \" \u003C\u003C shared_robot.use_count() \u003C\u003C \"\\n\";\n\n    return 0;\n}\n",[17,3327,3328,3334,3340,3346,3352,3356,3363,3367,3373,3377,3381,3413,3417,3435,3439,3445,3449,3453,3457,3477,3481,3511,3515,3519,3523,3550,3554,3584,3588,3592,3617,3621,3650,3654,3658,3666,3670,3674,3700,3712,3728,3768,3772,3798,3828,3836,3865,3869,3877],{"__ignoreMap":204},[208,3329,3330,3332],{"class":210,"line":211},[208,3331,215],{"class":214},[208,3333,219],{"class":218},[208,3335,3336,3338],{"class":210,"line":222},[208,3337,215],{"class":214},[208,3339,227],{"class":218},[208,3341,3342,3344],{"class":210,"line":230},[208,3343,215],{"class":214},[208,3345,235],{"class":218},[208,3347,3348,3350],{"class":210,"line":238},[208,3349,215],{"class":214},[208,3351,906],{"class":218},[208,3353,3354],{"class":210,"line":245},[208,3355,242],{"emptyLinePlaceholder":241},[208,3357,3358,3360],{"class":210,"line":255},[208,3359,248],{"class":214},[208,3361,3362],{"class":251}," Robot\n",[208,3364,3365],{"class":210,"line":262},[208,3366,259],{"class":258},[208,3368,3369,3371],{"class":210,"line":271},[208,3370,265],{"class":251},[208,3372,268],{"class":258},[208,3374,3375],{"class":210,"line":276},[208,3376,242],{"emptyLinePlaceholder":241},[208,3378,3379],{"class":210,"line":282},[208,3380,279],{"class":214},[208,3382,3383,3385,3388,3390,3392,3394,3396,3398,3400,3402,3404,3406,3408,3410],{"class":210,"line":322},[208,3384,285],{"class":214},[208,3386,3387],{"class":251}," Robot",[208,3389,291],{"class":258},[208,3391,1103],{"class":251},[208,3393,300],{"class":258},[208,3395,303],{"class":251},[208,3397,310],{"class":309},[208,3399,313],{"class":258},[208,3401,316],{"class":251},[208,3403,291],{"class":258},[208,3405,1103],{"class":251},[208,3407,300],{"class":258},[208,3409,1227],{"class":251},[208,3411,3412],{"class":258},"(name)) {}\n",[208,3414,3415],{"class":210,"line":328},[208,3416,242],{"emptyLinePlaceholder":241},[208,3418,3419,3421,3423,3425,3427,3429,3431,3433],{"class":210,"line":358},[208,3420,1047],{"class":214},[208,3422,297],{"class":251},[208,3424,300],{"class":258},[208,3426,303],{"class":251},[208,3428,306],{"class":214},[208,3430,310],{"class":251},[208,3432,424],{"class":258},[208,3434,427],{"class":214},[208,3436,3437],{"class":210,"line":364},[208,3438,325],{"class":258},[208,3440,3441,3443],{"class":210,"line":369},[208,3442,1070],{"class":214},[208,3444,1073],{"class":258},[208,3446,3447],{"class":210,"line":378},[208,3448,361],{"class":258},[208,3450,3451],{"class":210,"line":383},[208,3452,465],{"class":258},[208,3454,3455],{"class":210,"line":405},[208,3456,242],{"emptyLinePlaceholder":241},[208,3458,3459,3461,3464,3466,3468,3470,3472,3475],{"class":210,"line":410},[208,3460,1095],{"class":214},[208,3462,3463],{"class":251}," print_robot",[208,3465,291],{"class":258},[208,3467,294],{"class":214},[208,3469,3387],{"class":251},[208,3471,306],{"class":214},[208,3473,3474],{"class":309}," robot",[208,3476,1121],{"class":258},[208,3478,3479],{"class":210,"line":415},[208,3480,259],{"class":258},[208,3482,3483,3485,3487,3489,3492,3494,3497,3499,3501,3503,3505,3507,3509],{"class":210,"line":430},[208,3484,265],{"class":251},[208,3486,334],{"class":258},[208,3488,337],{"class":214},[208,3490,3491],{"class":218}," \"borrow: \"",[208,3493,741],{"class":214},[208,3495,3496],{"class":258}," robot.",[208,3498,1144],{"class":251},[208,3500,424],{"class":258},[208,3502,337],{"class":214},[208,3504,748],{"class":218},[208,3506,349],{"class":348},[208,3508,352],{"class":218},[208,3510,355],{"class":258},[208,3512,3513],{"class":210,"line":435},[208,3514,571],{"class":258},[208,3516,3517],{"class":210,"line":457},[208,3518,242],{"emptyLinePlaceholder":241},[208,3520,3521],{"class":210,"line":462},[208,3522,1090],{"class":564},[208,3524,3525,3527,3530,3532,3534,3536,3538,3540,3543,3545,3548],{"class":210,"line":468},[208,3526,1095],{"class":214},[208,3528,3529],{"class":251}," take_robot",[208,3531,291],{"class":258},[208,3533,1103],{"class":251},[208,3535,300],{"class":258},[208,3537,155],{"class":251},[208,3539,611],{"class":258},[208,3541,3542],{"class":251},"Robot",[208,3544,1115],{"class":258},[208,3546,3547],{"class":309},"robot",[208,3549,1121],{"class":258},[208,3551,3552],{"class":210,"line":473},[208,3553,259],{"class":258},[208,3555,3556,3558,3560,3562,3565,3567,3570,3572,3574,3576,3578,3580,3582],{"class":210,"line":484},[208,3557,265],{"class":251},[208,3559,334],{"class":258},[208,3561,337],{"class":214},[208,3563,3564],{"class":218}," \"take: \"",[208,3566,741],{"class":214},[208,3568,3569],{"class":258}," robot->",[208,3571,1144],{"class":251},[208,3573,424],{"class":258},[208,3575,337],{"class":214},[208,3577,748],{"class":218},[208,3579,349],{"class":348},[208,3581,352],{"class":218},[208,3583,355],{"class":258},[208,3585,3586],{"class":210,"line":489},[208,3587,571],{"class":258},[208,3589,3590],{"class":210,"line":517},[208,3591,242],{"emptyLinePlaceholder":241},[208,3593,3594,3596,3599,3601,3603,3605,3607,3609,3611,3613,3615],{"class":210,"line":529},[208,3595,1095],{"class":214},[208,3597,3598],{"class":251}," share_robot",[208,3600,291],{"class":258},[208,3602,1103],{"class":251},[208,3604,300],{"class":258},[208,3606,92],{"class":251},[208,3608,611],{"class":258},[208,3610,3542],{"class":251},[208,3612,1115],{"class":258},[208,3614,3547],{"class":309},[208,3616,1121],{"class":258},[208,3618,3619],{"class":210,"line":534},[208,3620,259],{"class":258},[208,3622,3623,3625,3627,3629,3632,3634,3636,3638,3640,3642,3644,3646,3648],{"class":210,"line":552},[208,3624,265],{"class":251},[208,3626,334],{"class":258},[208,3628,337],{"class":214},[208,3630,3631],{"class":218}," \"share count inside = \"",[208,3633,741],{"class":214},[208,3635,3496],{"class":258},[208,3637,1690],{"class":251},[208,3639,424],{"class":258},[208,3641,337],{"class":214},[208,3643,748],{"class":218},[208,3645,349],{"class":348},[208,3647,352],{"class":218},[208,3649,355],{"class":258},[208,3651,3652],{"class":210,"line":568},[208,3653,571],{"class":258},[208,3655,3656],{"class":210,"line":574},[208,3657,242],{"emptyLinePlaceholder":241},[208,3659,3660,3662,3664],{"class":210,"line":579},[208,3661,682],{"class":214},[208,3663,685],{"class":251},[208,3665,375],{"class":258},[208,3667,3668],{"class":210,"line":589},[208,3669,259],{"class":258},[208,3671,3672],{"class":210,"line":594},[208,3673,1181],{"class":564},[208,3675,3676,3678,3681,3683,3685,3687,3689,3691,3693,3695,3698],{"class":210,"line":625},[208,3677,597],{"class":214},[208,3679,3680],{"class":258}," robot ",[208,3682,501],{"class":214},[208,3684,297],{"class":251},[208,3686,300],{"class":258},[208,3688,608],{"class":251},[208,3690,611],{"class":258},[208,3692,3542],{"class":251},[208,3694,617],{"class":258},[208,3696,3697],{"class":218},"\"R1\"",[208,3699,514],{"class":258},[208,3701,3702,3705,3707,3709],{"class":210,"line":634},[208,3703,3704],{"class":251},"    print_robot",[208,3706,291],{"class":258},[208,3708,495],{"class":214},[208,3710,3711],{"class":258},"robot);\n",[208,3713,3714,3717,3719,3721,3723,3725],{"class":210,"line":639},[208,3715,3716],{"class":251},"    take_robot",[208,3718,291],{"class":258},[208,3720,1103],{"class":251},[208,3722,300],{"class":258},[208,3724,1227],{"class":251},[208,3726,3727],{"class":258},"(robot));\n",[208,3729,3730,3732,3734,3736,3739,3741,3744,3746,3748,3750,3752,3754,3756,3758,3760,3762,3764,3766],{"class":210,"line":657},[208,3731,265],{"class":251},[208,3733,334],{"class":258},[208,3735,337],{"class":214},[208,3737,3738],{"class":218}," \"robot is null? \"",[208,3740,741],{"class":214},[208,3742,3743],{"class":258}," (robot ",[208,3745,1249],{"class":214},[208,3747,1252],{"class":348},[208,3749,1255],{"class":214},[208,3751,1258],{"class":218},[208,3753,1261],{"class":214},[208,3755,1264],{"class":218},[208,3757,1267],{"class":258},[208,3759,337],{"class":214},[208,3761,748],{"class":218},[208,3763,349],{"class":348},[208,3765,352],{"class":218},[208,3767,355],{"class":258},[208,3769,3770],{"class":210,"line":669},[208,3771,242],{"emptyLinePlaceholder":241},[208,3773,3774,3776,3779,3781,3783,3785,3787,3789,3791,3793,3796],{"class":210,"line":674},[208,3775,597],{"class":214},[208,3777,3778],{"class":258}," shared_robot ",[208,3780,501],{"class":214},[208,3782,297],{"class":251},[208,3784,300],{"class":258},[208,3786,1659],{"class":251},[208,3788,611],{"class":258},[208,3790,3542],{"class":251},[208,3792,617],{"class":258},[208,3794,3795],{"class":218},"\"R2\"",[208,3797,514],{"class":258},[208,3799,3800,3802,3804,3806,3809,3811,3814,3816,3818,3820,3822,3824,3826],{"class":210,"line":679},[208,3801,265],{"class":251},[208,3803,334],{"class":258},[208,3805,337],{"class":214},[208,3807,3808],{"class":218}," \"share count before = \"",[208,3810,741],{"class":214},[208,3812,3813],{"class":258}," shared_robot.",[208,3815,1690],{"class":251},[208,3817,424],{"class":258},[208,3819,337],{"class":214},[208,3821,748],{"class":218},[208,3823,349],{"class":348},[208,3825,352],{"class":218},[208,3827,355],{"class":258},[208,3829,3830,3833],{"class":210,"line":690},[208,3831,3832],{"class":251},"    share_robot",[208,3834,3835],{"class":258},"(shared_robot);\n",[208,3837,3838,3840,3842,3844,3847,3849,3851,3853,3855,3857,3859,3861,3863],{"class":210,"line":695},[208,3839,265],{"class":251},[208,3841,334],{"class":258},[208,3843,337],{"class":214},[208,3845,3846],{"class":218}," \"share count after = \"",[208,3848,741],{"class":214},[208,3850,3813],{"class":258},[208,3852,1690],{"class":251},[208,3854,424],{"class":258},[208,3856,337],{"class":214},[208,3858,748],{"class":218},[208,3860,349],{"class":348},[208,3862,352],{"class":218},[208,3864,355],{"class":258},[208,3866,3867],{"class":210,"line":709},[208,3868,242],{"emptyLinePlaceholder":241},[208,3870,3871,3873,3875],{"class":210,"line":714},[208,3872,555],{"class":214},[208,3874,835],{"class":348},[208,3876,355],{"class":258},[208,3878,3879],{"class":210,"line":729},[208,3880,571],{"class":258},[14,3882,3883,849],{},[846,3884,848],{},[199,3886,3889],{"className":3887,"code":3888,"language":855,"meta":204},[853],"borrow: R1\ntake: R1\nrobot is null? yes\nshare count before = 1\nshare count inside = 2\nshare count after = 1\n",[17,3890,3888],{"__ignoreMap":204},[10,3892,3893],{"id":3893},"關鍵語法解釋",[29,3895,3896,3909],{},[32,3897,3898],{},[35,3899,3900,3903,3906],{},[38,3901,3902],{"align":40},"寫法",[38,3904,3905],{"align":40},"含義",[38,3907,3908],{"align":40},"注意事項",[48,3910,3911,3924,3940,3953,3966,3980],{},[35,3912,3913,3918,3921],{},[53,3914,3915],{"align":40},[17,3916,3917],{},"std::make_unique\u003CT>(...)",[53,3919,3920],{"align":40},"創建獨佔所有權對象",[53,3922,3923],{"align":40},"C++14 起可用",[35,3925,3926,3931,3937],{},[53,3927,3928],{"align":40},[17,3929,3930],{},"std::move(p)",[53,3932,3933,3934,3936],{"align":40},"把 ",[17,3935,155],{}," 所有權轉出去",[53,3938,3939],{"align":40},"移動後原指針通常爲空",[35,3941,3942,3947,3950],{},[53,3943,3944],{"align":40},[17,3945,3946],{},"std::make_shared\u003CT>(...)",[53,3948,3949],{"align":40},"創建共享所有權對象",[53,3951,3952],{"align":40},"引用計數有開銷",[35,3954,3955,3960,3963],{},[53,3956,3957],{"align":40},[17,3958,3959],{},"sp.use_count()",[53,3961,3962],{"align":40},"查看共享引用計數",[53,3964,3965],{"align":40},"教學調試可用，業務邏輯不要依賴它",[35,3967,3968,3972,3975],{},[53,3969,3970],{"align":40},[17,3971,83],{},[53,3973,3974],{"align":40},"弱引用，不增加引用計數",[53,3976,3977,3978],{"align":40},"訪問前必須 ",[17,3979,2355],{},[35,3981,3982,3987,3990],{},[53,3983,3984],{"align":40},[17,3985,3986],{},"p.reset()",[53,3988,3989],{"align":40},"釋放當前管理的對象",[53,3991,3992,3993,3995],{"align":40},"對 ",[17,3994,92],{}," 是減少一次引用計數",[10,3997,3998],{"id":3998},"常見錯誤",[142,4000,4001,4009,4015,4024,4030],{},[105,4002,3933,4003,4005,4006,4008],{},[17,4004,155],{}," 當普通指針複製。",[17,4007,155],{}," 只能移動，不能複製。",[105,4010,4011,4012,4014],{},"明明只是借用對象，卻把參數寫成 ",[17,4013,92],{},"。這會暗示函數也參與共享所有權。",[105,4016,4017,4018,4020,4021,4023],{},"用一個 ",[17,4019,92],{}," 的原始指針創建另一個 ",[17,4022,92],{},"。這樣會產生兩個控制塊，最終可能重複釋放。",[105,4025,4026,4027,4029],{},"兩個對象互相用 ",[17,4028,92],{}," 持有對方，導致循環引用。",[105,4031,4032,4033,4035],{},"用智能指針管理棧對象。例如把局部變量地址交給 ",[17,4034,155],{},"，離開作用域時會錯誤釋放棧內存。",[10,4037,4038],{"id":4038},"使用建議",[142,4040,4041,4044,4049,4054,4062,4069],{},[105,4042,4043],{},"能不用指針就不用指針，普通對象和引用優先。",[105,4045,4046,4047,137],{},"需要動態所有權時，優先用 ",[17,4048,155],{},[105,4050,4051,4052,137],{},"只有確實有多個所有者時，才用 ",[17,4053,92],{},[105,4055,4056,4057,4059,4060,137],{},"只觀察 ",[17,4058,92],{}," 管理的對象時，用 ",[17,4061,175],{},[105,4063,4064,4065,2732,4067,137],{},"創建智能指針優先使用 ",[17,4066,608],{},[17,4068,1659],{},[105,4070,4071],{},"函數參數要表達語義：借用、轉移、共享不要混用。",[10,4073,4074],{"id":4074},"小結",[102,4076,4077,4080,4085,4090,4095],{},[105,4078,4079],{},"智能指針是 RAII 的典型應用。",[105,4081,4082,4084],{},[17,4083,155],{}," 表達獨佔所有權，是默認首選。",[105,4086,4087,4089],{},[17,4088,92],{}," 表達共享所有權，不要因爲方便就濫用。",[105,4091,4092,4094],{},[17,4093,175],{}," 不擁有對象，常用於解決循環引用。",[105,4096,4097],{},"智能指針最重要的不是\"自動 delete\"，而是把所有權關係寫清楚。",[4099,4100,4101],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}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);}",{"title":204,"searchDepth":222,"depth":222,"links":4103},[4104,4105,4106,4107,4114,4115,4116,4117],{"id":12,"depth":222,"text":12},{"id":99,"depth":222,"text":100},{"id":140,"depth":222,"text":140},{"id":182,"depth":222,"text":182,"children":4108},[4109,4110,4111,4112,4113],{"id":186,"depth":230,"text":187},{"id":870,"depth":230,"text":871},{"id":1396,"depth":230,"text":1397},{"id":1888,"depth":230,"text":1889},{"id":3287,"depth":230,"text":3288},{"id":3893,"depth":222,"text":3893},{"id":3998,"depth":222,"text":3998},{"id":4038,"depth":222,"text":4038},{"id":4074,"depth":222,"text":4074},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","2000-0900","2023-10-05","wiki\u002F2023-10-05-cplusplus-jiao-xue","zh-hant:2023-10-05-cplusplus-jiao-xue","\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue","Cplusplus教学","md","wiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针",false,null,"zh-Hant","zh-hant",{},{"title":5,"description":204},"\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0900-智能指针","FVITxOn4A6jiqVv4dfYtlCFcQ8XqpSOqrSGvTppnqwQ",[4137,4143,4148,4153,4158,4163,4168,4173,4178,4183,4188,4193,4198,4203,4208,4213,4218,4223,4228,4233,4238,4243,4248,4253,4258,4263,4268,4273,4278,4283,4288,4293,4298,4303,4308,4313,4318,4323,4327,4332,4337,4342,4347,4352,4357,4362,4363,4368,4373,4378,4383,4388,4393,4398,4403,4408,4413,4418,4423,4428,4433,4438,4443,4448,4453,4458,4463,4468,4473,4478,4483,4488,4493,4498,4503,4508,4513,4518,4523,4528,4533,4538],{"path":4138,"stem":4139,"title":4140,"date":4120,"chapterOrder":4141,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0100-c-kai-fa-huan-jing-da-jian-yu-ce-shi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0100-C++开发环境搭建与测试","C++開發環境搭建與測試","0100",0,{"path":4144,"stem":4145,"title":4146,"date":4120,"chapterOrder":4147,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0200-c-ji-chu-chu-shi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0200-C++基础初识","C++基礎初識","0200",{"path":4149,"stem":4150,"title":4151,"date":4120,"chapterOrder":4152,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0300-shu-ju-lei-xing-yu-shu-ju-cun-fang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0300-数据类型与数据存放","數據類型與數據存放","0300",{"path":4154,"stem":4155,"title":4156,"date":4120,"chapterOrder":4157,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0400-shu-ru-shu-chu","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0400-输入输出","輸入輸出","0400",{"path":4159,"stem":4160,"title":4161,"date":4120,"chapterOrder":4162,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0500-yun-suan-fu","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0500-运算符","運算符","0500",{"path":4164,"stem":4165,"title":4166,"date":4120,"chapterOrder":4167,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0600-cheng-xu-liu-cheng-jie-gou","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0600-程序流程结构","程序流程結構","0600",{"path":4169,"stem":4170,"title":4171,"date":4120,"chapterOrder":4172,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0700-shu-zu","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0700-数组","數組","0700",{"path":4174,"stem":4175,"title":4176,"date":4120,"chapterOrder":4177,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0800-han-shu-yu-tou-wen-jian","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0800-函数与头文件","函數與頭文件","0800",{"path":4179,"stem":4180,"title":4181,"date":4120,"chapterOrder":4182,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F0900-zhi-zhen","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F0900-指针","指針","0900",{"path":4184,"stem":4185,"title":4186,"date":4120,"chapterOrder":4187,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1000-jie-gou-ti-yu-gong-yong-ti","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1000-结构体与共用体","結構體與共用體","1000",{"path":4189,"stem":4190,"title":4191,"date":4120,"chapterOrder":4192,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1100-nei-cun-fen-qu-yu-sheng-ming-zhou-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1100-内存分区与生命周期","內存分區與生命週期","1100",{"path":4194,"stem":4195,"title":4196,"date":4120,"chapterOrder":4197,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1200-yin-yong","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1200-引用","引用","1200",{"path":4199,"stem":4200,"title":4201,"date":4120,"chapterOrder":4202,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1300-han-shu-ti-gao-yu-ming-ming-kong-jian","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1300-函数提高与命名空间","函數提高與命名空間","1300",{"path":4204,"stem":4205,"title":4206,"date":4120,"chapterOrder":4207,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0100-feng-zhuang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0100-封装","封裝","1400-0100",{"path":4209,"stem":4210,"title":4211,"date":4120,"chapterOrder":4212,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0200-dui-xiang-chu-shi-hua-he-qing-li","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0200-对象初始化和清理","對象初始化和清理","1400-0200",{"path":4214,"stem":4215,"title":4216,"date":4120,"chapterOrder":4217,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0300-dui-xiang-mo-xing-yu-this-zhi-zhen","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0300-对象模型与this指针","對象模型與this指針","1400-0300",{"path":4219,"stem":4220,"title":4221,"date":4120,"chapterOrder":4222,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0400-you-yuan-yu-yun-suan-fu-zhong-zai","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0400-友元与运算符重载","友元與運算符重載","1400-0400",{"path":4224,"stem":4225,"title":4226,"date":4120,"chapterOrder":4227,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0500-ji-cheng","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0500-继承","繼承","1400-0500",{"path":4229,"stem":4230,"title":4231,"date":4120,"chapterOrder":4232,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-0600-duo-tai","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-0600-多态","多態","1400-0600",{"path":4234,"stem":4235,"title":4236,"date":4120,"chapterOrder":4237,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1400-lei-he-dui-xiang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1400-类和对象","類和對象","1400",{"path":4239,"stem":4240,"title":4241,"date":4120,"chapterOrder":4242,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1500-wen-jian-cao-zuo","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1500-文件操作","文件操作","1500",{"path":4244,"stem":4245,"title":4246,"date":4120,"chapterOrder":4247,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1600-yi-chang-chu-li-yu-cuo-wu-ma","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1600-异常处理与错误码","異常處理","1600",{"path":4249,"stem":4250,"title":4251,"date":4120,"chapterOrder":4252,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1700-mu-ban","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1700-模板","模板","1700",{"path":4254,"stem":4255,"title":4256,"date":4120,"chapterOrder":4257,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0100-stl-chu-shi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0100-STL初识","STL初識","1800-0100",{"path":4259,"stem":4260,"title":4261,"date":4120,"chapterOrder":4262,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0200-std-array","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0200-std-array","std::array","1800-0200",{"path":4264,"stem":4265,"title":4266,"date":4120,"chapterOrder":4267,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0300-string-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0300-string容器","string容器","1800-0300",{"path":4269,"stem":4270,"title":4271,"date":4120,"chapterOrder":4272,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0400-vector-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0400-vector容器","vector 容器","1800-0400",{"path":4274,"stem":4275,"title":4276,"date":4120,"chapterOrder":4277,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0500-deque-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0500-deque容器","deque 容器","1800-0500",{"path":4279,"stem":4280,"title":4281,"date":4120,"chapterOrder":4282,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0600-stack-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0600-stack容器","stack 容器","1800-0600",{"path":4284,"stem":4285,"title":4286,"date":4120,"chapterOrder":4287,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0700-queue-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0700-queue容器","queue 容器","1800-0700",{"path":4289,"stem":4290,"title":4291,"date":4120,"chapterOrder":4292,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0800-list-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0800-list容器","list 容器","1800-0800",{"path":4294,"stem":4295,"title":4296,"date":4120,"chapterOrder":4297,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-0900-set-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-0900-set容器","set \u002F multiset 容器","1800-0900",{"path":4299,"stem":4300,"title":4301,"date":4120,"chapterOrder":4302,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1000-map-rong-qi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1000-map容器","map \u002F multimap 容器","1800-1000",{"path":4304,"stem":4305,"title":4306,"date":4120,"chapterOrder":4307,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1100-han-shu-dui-xiang-yu-wei-ci","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1100-函数对象与谓词","函數對象與謂詞","1800-1100",{"path":4309,"stem":4310,"title":4311,"date":4120,"chapterOrder":4312,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-1200-chang-yong-suan-fa","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-1200-常用算法","常用算法","1800-1200",{"path":4314,"stem":4315,"title":4316,"date":4120,"chapterOrder":4317,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1800-stl-ti-gao-bian-cheng","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1800-STL提高编程","STL提高編程","1800",{"path":4319,"stem":4320,"title":4321,"date":4120,"chapterOrder":4322,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F1900-c-lei-xing-zhuan-huan","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F1900-C++类型转换","C++類型轉換","1900",{"path":4324,"stem":4325,"title":2274,"date":4120,"chapterOrder":4326,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0100-auto","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0100-auto","2000-0100",{"path":4328,"stem":4329,"title":4330,"date":4120,"chapterOrder":4331,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0200-nullptr","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0200-nullptr","nullptr","2000-0200",{"path":4333,"stem":4334,"title":4335,"date":4120,"chapterOrder":4336,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0300-using","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0300-using","using","2000-0300",{"path":4338,"stem":4339,"title":4340,"date":4120,"chapterOrder":4341,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0400-enum-class","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0400-enum-class","enum class","2000-0400",{"path":4343,"stem":4344,"title":4345,"date":4120,"chapterOrder":4346,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0500-fan-wei-for-xun-huan","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0500-范围for循环","範圍 for 循環","2000-0500",{"path":4348,"stem":4349,"title":4350,"date":4120,"chapterOrder":4351,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0600-jie-gou-hua-bang-ding","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0600-结构化绑定","結構化綁定","2000-0600",{"path":4353,"stem":4354,"title":4355,"date":4120,"chapterOrder":4356,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0700-constexpr","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0700-constexpr","constexpr","2000-0700",{"path":4358,"stem":4359,"title":4360,"date":4120,"chapterOrder":4361,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0800-raii","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-0800-RAII","RAII","2000-0800",{"path":4118,"stem":4134,"title":5,"date":4120,"chapterOrder":4119,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},{"path":4364,"stem":4365,"title":4366,"date":4120,"chapterOrder":4367,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1000-you-zhi-yin-yong-he-yi-dong-yu-yi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1000-右值引用和移动语义","右值引用和移動語義","2000-1000",{"path":4369,"stem":4370,"title":4371,"date":4120,"chapterOrder":4372,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1100-lambda-biao-da-shi","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1100-Lambda表达式","Lambda 表達式","2000-1100",{"path":4374,"stem":4375,"title":4376,"date":4120,"chapterOrder":4377,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1200-std-function","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1200-std-function","std::function","2000-1200",{"path":4379,"stem":4380,"title":4381,"date":4120,"chapterOrder":4382,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1300-std-bind","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1300-std-bind","std::bind","2000-1300",{"path":4384,"stem":4385,"title":4386,"date":4120,"chapterOrder":4387,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1400-std-optional","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1400-std-optional","std::optional","2000-1400",{"path":4389,"stem":4390,"title":4391,"date":4120,"chapterOrder":4392,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1500-std-variant","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1500-std-variant","std::variant","2000-1500",{"path":4394,"stem":4395,"title":4396,"date":4120,"chapterOrder":4397,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1600-std-span","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1600-std-span","std::span","2000-1600",{"path":4399,"stem":4400,"title":4401,"date":4120,"chapterOrder":4402,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1700-std-format-print","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1700-std-format-print","std::format \u002F std::print","2000-1700",{"path":4404,"stem":4405,"title":4406,"date":4120,"chapterOrder":4407,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1800-std-chrono","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1800-std-chrono","std::chrono","2000-1800",{"path":4409,"stem":4410,"title":4411,"date":4120,"chapterOrder":4412,"chapterDepth":222,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0100-std-thread","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0100-std-thread","std::thread 與 join","2000-1900-0100",{"path":4414,"stem":4415,"title":4416,"date":4120,"chapterOrder":4417,"chapterDepth":222,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0200-mutex-lock-guard","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0200-mutex-lock-guard","mutex 與 lock_guard","2000-1900-0200",{"path":4419,"stem":4420,"title":4421,"date":4120,"chapterOrder":4422,"chapterDepth":222,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0300-std-atomic","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0300-std-atomic","std::atomic","2000-1900-0300",{"path":4424,"stem":4425,"title":4426,"date":4120,"chapterOrder":4427,"chapterDepth":222,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-0400-condition-variable","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-0400-condition-variable","condition_variable","2000-1900-0400",{"path":4429,"stem":4430,"title":4431,"date":4120,"chapterOrder":4432,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-1900-bing-fa-bian-cheng","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-1900-并发编程","併發編程","2000-1900",{"path":4434,"stem":4435,"title":4436,"date":4120,"chapterOrder":4437,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2000-std-filesystem","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2000-std-filesystem","std::filesystem","2000-2000",{"path":4439,"stem":4440,"title":4441,"date":4120,"chapterOrder":4442,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-2100-modules-jian-jie","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-2100-modules简介","modules 簡介","2000-2100",{"path":4444,"stem":4445,"title":4446,"date":4120,"chapterOrder":4447,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-xian-dai-c","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2000-现代C++","現代C++","2000",{"path":4449,"stem":4450,"title":4451,"date":4120,"chapterOrder":4452,"chapterDepth":222,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0100-ding-shi-qi-yu-yi-bu-io","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0100-定时器与异步IO","定時器與異步 IO","2100-0100-0100",{"path":4454,"stem":4455,"title":4456,"date":4120,"chapterOrder":4457,"chapterDepth":222,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0200-boost-asio-ji-chu","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0200-Boost.Asio基础","Boost.Asio 基礎","2100-0100-0200",{"path":4459,"stem":4460,"title":4461,"date":4120,"chapterOrder":4462,"chapterDepth":222,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0300-chuan-kou-tong-xin","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0300-串口通信","串口通信","2100-0100-0300",{"path":4464,"stem":4465,"title":4466,"date":4120,"chapterOrder":4467,"chapterDepth":222,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0400-tcp-tong-xin","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0400-TCP通信","TCP 通信","2100-0100-0400",{"path":4469,"stem":4470,"title":4471,"date":4120,"chapterOrder":4472,"chapterDepth":222,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0500-udp-tong-xin","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0500-UDP通信","UDP 通信","2100-0100-0500",{"path":4474,"stem":4475,"title":4476,"date":4120,"chapterOrder":4477,"chapterDepth":222,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-0600-ji-qi-ren-gong-cheng-xie-fa-yu-ros2-ji-cheng","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-0600-机器人工程写法与ROS2集成","機器人工程寫法與 ROS2 集成","2100-0100-0600",{"path":4479,"stem":4480,"title":4481,"date":4120,"chapterOrder":4482,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0100-boost-asio-yi-bu-io-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0100-Boost.Asio异步IO库","Boost.Asio異步IO庫","2100-0100",{"path":4484,"stem":4485,"title":4486,"date":4120,"chapterOrder":4487,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0200-eigen-xian-xing-dai-shu-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0200-Eigen线性代数库","Eigen線性代數庫","2100-0200",{"path":4489,"stem":4490,"title":4491,"date":4120,"chapterOrder":4492,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0300-opencv-ji-suan-ji-shi-jue-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0300-OpenCV计算机视觉库","OpenCV計算機視覺庫","2100-0300",{"path":4494,"stem":4495,"title":4496,"date":4120,"chapterOrder":4497,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0400-pcl-dian-yun-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0400-PCL点云库","PCL點雲庫","2100-0400",{"path":4499,"stem":4500,"title":4501,"date":4120,"chapterOrder":4502,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-0500-sophus-li-qun-li-dai-shu-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-0500-Sophus李群李代数库","Sophus 李羣李代數庫","2100-0500",{"path":4504,"stem":4505,"title":4506,"date":4120,"chapterOrder":4507,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2100-chang-yong-ku","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2100-常用库","常用庫學習","2100",{"path":4509,"stem":4510,"title":4511,"date":4120,"chapterOrder":4512,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0100-cmakepresets-yu-gou-jian-an-zhuang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0100-CMakePresets与构建安装","CMakePresets與構建安裝","2200-0100",{"path":4514,"stem":4515,"title":4516,"date":4120,"chapterOrder":4517,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0200-ding-ceng-cmake-yu-gong-gong-bian-yi-xuan-xiang","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0200-顶层CMake与公共编译选项","頂層CMake與公共編譯選項","2200-0200",{"path":4519,"stem":4520,"title":4521,"date":4120,"chapterOrder":4522,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0300-src-yu-lib-mo-kuai-cmake-xiang-jie","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0300-src与lib模块CMake详解","src與lib模塊CMake詳解","2200-0300",{"path":4524,"stem":4525,"title":4526,"date":4120,"chapterOrder":4527,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0400-di-san-fang-ku-yi-lai-xie-fa","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0400-第三方库依赖写法","第三方庫依賴寫法","2200-0400",{"path":4529,"stem":4530,"title":4531,"date":4120,"chapterOrder":4532,"chapterDepth":211,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-0500-mu-ban-kuo-zhan-yu-chang-jian-wen-ti","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-0500-模板扩展与常见问题","模板擴展與常見問題","2200-0500",{"path":4534,"stem":4535,"title":4536,"date":4120,"chapterOrder":4537,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":4127},"\u002Fzh-hant\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2200-cmake-gong-cheng-mu-ban","_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002F2200-CMake工程模板","CMake工程模板","2200",{"path":4123,"stem":4539,"title":4540,"date":4120,"chapterOrder":4128,"chapterDepth":4142,"docKey":4122,"docRoot":4123,"docTitle":4124,"isWikiDoc":241,"isWikiIndex":241},"_i18n\u002Fzh-hant\u002Fwiki\u002F2023-10-05-Cplusplus教学\u002Findex","C\u002FC++教程",{"variants":4542},[4543,4546,4547,4550,4553],{"path":4544,"localeSlug":4545,"i18nKey":4126},"\u002Fen-us\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","en-us",{"path":4118,"localeSlug":4130,"i18nKey":4126},{"path":4548,"localeSlug":4549,"i18nKey":4126},"\u002Fzh-hk\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","zh-hk",{"path":4551,"localeSlug":4552,"i18nKey":4126},"\u002Fzh-tw\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","zh-tw",{"path":4554,"localeSlug":4555,"i18nKey":4126},"\u002Fzh-cn\u002Fwiki\u002F2023-10-05-cplusplus-jiao-xue\u002F2000-0900-zhi-neng-zhi-zhen","zh-cn",[4544,4133,4118,4133,4548,4133,4551,4133,4554,4133],1784646813131]