日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

探秘C++標(biāo)準(zhǔn)模板庫(kù)中的三種智能指針

來(lái)源: 責(zé)編: 時(shí)間:2024-01-24 17:27:42 298觀看
導(dǎo)讀在C++標(biāo)準(zhǔn)模板庫(kù)(STL)中有三種智能指針:shared_ptr、unique_ptr和weak_ptr。這三者在現(xiàn)代C++編程中扮演著至關(guān)重要的角色,它們的設(shè)計(jì)旨在管理動(dòng)態(tài)內(nèi)存,并提供更安全、更方便的內(nèi)存管理方式。shared_ptr:共享的智能指針share

在C++標(biāo)準(zhǔn)模板庫(kù)(STL)中有三種智能指針:shared_ptr、unique_ptr和weak_ptr。這三者在現(xiàn)代C++編程中扮演著至關(guān)重要的角色,它們的設(shè)計(jì)旨在管理動(dòng)態(tài)內(nèi)存,并提供更安全、更方便的內(nèi)存管理方式。ApJ28資訊網(wǎng)——每日最新資訊28at.com

ApJ28資訊網(wǎng)——每日最新資訊28at.com

shared_ptr:共享的智能指針

shared_ptr是一種具有引用計(jì)數(shù)功能的智能指針。當(dāng)多個(gè)shared_ptr指向同一塊內(nèi)存時(shí),它們會(huì)維護(hù)一個(gè)引用計(jì)數(shù),確保在沒(méi)有任何指針指向該內(nèi)存時(shí)自動(dòng)釋放。下面是一個(gè)簡(jiǎn)單的示例:ApJ28資訊網(wǎng)——每日最新資訊28at.com

#include <memory>#include <iostream>int main() {    std::shared_ptr<int> shared1 = std::make_shared<int>(42);    std::shared_ptr<int> shared2 = shared1; // 共享所有權(quán)    std::cout << "shared1: " << *shared1 << std::endl; // 輸出:42    std::cout << "shared2: " << *shared2 << std::endl; // 輸出:42    // 引用計(jì)數(shù)減一,但不會(huì)釋放內(nèi)存,因?yàn)槿匀挥幸粋€(gè)shared_ptr指向它    shared1.reset();    std::cout << "shared2: " << *shared2 << std::endl; // 輸出:42    // 當(dāng)最后一個(gè)shared_ptr離開作用域時(shí),引用計(jì)數(shù)為零,內(nèi)存被釋放    return 0;}

shared_ptr的優(yōu)勢(shì)在于其能夠方便地共享所有權(quán),但同時(shí)也容易造成循環(huán)引用,因?yàn)樗鼈冎挥性谝糜?jì)數(shù)歸零時(shí)才會(huì)釋放內(nèi)存。這時(shí)就引出了我們接下來(lái)要介紹的weak_ptr。ApJ28資訊網(wǎng)——每日最新資訊28at.com

weak_ptr:破除shared_ptr的循環(huán)引用

weak_ptr是一種不增加引用計(jì)數(shù)的智能指針,通常用于打破shared_ptr的循環(huán)引用。weak_ptr允許你觀察到由shared_ptr管理的對(duì)象,但不擁有它。讓我們看一個(gè)例子:ApJ28資訊網(wǎng)——每日最新資訊28at.com

#include <memory>#include <iostream>struct Node {    std::shared_ptr<Node> next;};int main() {    std::shared_ptr<Node> node1 = std::make_shared<Node>();    std::shared_ptr<Node> node2 = std::make_shared<Node>();    node1->next = node2;    node2->next = node1; // 引入循環(huán)引用    // 使用weak_ptr打破循環(huán)引用    std::weak_ptr<Node> weakNode1 = node1;    std::weak_ptr<Node> weakNode2 = node2;    // 輸出:2 2,因?yàn)檠h(huán)引用被打破,引用計(jì)數(shù)不再增加    std::cout << "node1 references: " << node1.use_count() << std::endl;    std::cout << "node2 references: " << node2.use_count() << std::endl;    return 0;}

weak_ptr的一個(gè)重要特性是,通過(guò)lock()函數(shù)可以將其轉(zhuǎn)換為一個(gè)shared_ptr,以便安全地訪問(wèn)所指向的對(duì)象。在使用weak_ptr時(shí)要注意,由于它不增加引用計(jì)數(shù),所以在使用前需要檢查對(duì)象是否仍然存在。ApJ28資訊網(wǎng)——每日最新資訊28at.com

unique_ptr:獨(dú)占所有權(quán)的智能指針

unique_ptr是一種獨(dú)占所有權(quán)的智能指針,它確保在任何時(shí)候只有一個(gè)unique_ptr可以指向給定的對(duì)象。當(dāng)unique_ptr離開作用域時(shí),它所管理的對(duì)象會(huì)被自動(dòng)釋放。讓我們看一個(gè)例子:ApJ28資訊網(wǎng)——每日最新資訊28at.com

#include <memory>#include <iostream>int main() {    std::unique_ptr<int> unique1 = std::make_unique<int>(42);    // 編譯錯(cuò)誤,因?yàn)閡nique1獨(dú)占了對(duì)內(nèi)存的所有權(quán)    // std::unique_ptr<int> unique2 = unique1;   std::cout << "unique1: " << *unique1 << std::endl; // 輸出:42    // unique1離開作用域,內(nèi)存被釋放    return 0;}

unique_ptr的優(yōu)勢(shì)在于它避免了共享所有權(quán)可能引發(fā)的循環(huán)引用問(wèn)題,并允許更加高效的內(nèi)存管理。然而,由于其獨(dú)占性質(zhì),unique_ptr不適用于所有場(chǎng)景,特別是在需要多個(gè)指針共享同一塊內(nèi)存的情況下。ApJ28資訊網(wǎng)——每日最新資訊28at.com

總結(jié):三者的聯(lián)系與區(qū)別

在使用這三種智能指針時(shí),我們需要根據(jù)具體的需求來(lái)選擇合適的類型。下面是它們的聯(lián)系和區(qū)別的簡(jiǎn)要總結(jié):所有權(quán)管理:ApJ28資訊網(wǎng)——每日最新資訊28at.com

  • shared_ptr:共享所有權(quán),可以由多個(gè)shared_ptr共同管理同一塊內(nèi)存。
  • unique_ptr:獨(dú)占所有權(quán),確保在任何時(shí)候只有一個(gè)unique_ptr可以指向給定的對(duì)象。
  • weak_ptr:不增加引用計(jì)數(shù),用于解決shared_ptr可能引發(fā)的循環(huán)引用問(wèn)題。

循環(huán)引用處理:ApJ28資訊網(wǎng)——每日最新資訊28at.com

  • shared_ptr:容易形成循環(huán)引用,需要小心管理。
  • unique_ptr:不涉及循環(huán)引用問(wèn)題,因?yàn)樗仟?dú)占所有權(quán)的。
  • weak_ptr:用于打破shared_ptr的循環(huán)引用,但需要小心使用,確保在訪問(wèn)前檢查對(duì)象是否仍然存在。

性能開銷:ApJ28資訊網(wǎng)——每日最新資訊28at.com

  • shared_ptr:引用計(jì)數(shù)的維護(hù)可能帶來(lái)額外的性能開銷。
  • unique_ptr:更加輕量,沒(méi)有引用計(jì)數(shù),性能開銷較小。
  • weak_ptr:相對(duì)于shared_ptr來(lái)說(shuō),性能開銷較小。

在實(shí)際應(yīng)用中,我們可以根據(jù)具體場(chǎng)景的需要,選擇合適的智能指針類型,以獲得更好的內(nèi)存管理和性能表現(xiàn)。ApJ28資訊網(wǎng)——每日最新資訊28at.com

結(jié)語(yǔ)

在本次的C++探秘中,我們深入了解了shared_ptr、unique_ptr和weak_ptr這三種智能指針。它們分別適用于不同的場(chǎng)景,為我們提供了更安全、更靈活的內(nèi)存管理方式。在實(shí)際編程中,熟練掌握這些智能指針的用法,將有助于提高代碼的可維護(hù)性和安全性。ApJ28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-67344-0.html探秘C++標(biāo)準(zhǔn)模板庫(kù)中的三種智能指針

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 在Django中自定義字段,你需要知道的所有知識(shí)點(diǎn)!

下一篇: 一文讀懂C++如何實(shí)現(xiàn)多返回值

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久国产福利| 中国日韩欧美久久久久久久久| 国产精品国产亚洲精品看不卡15| 欧美日韩一区视频| 国产精品亚洲一区| 国内精品美女在线观看| 亚洲激情不卡| 一区二区三区视频在线| 欧美一区二区三区另类| 麻豆freexxxx性91精品| 欧美人交a欧美精品| 国产日韩欧美一区| 亚洲黄色一区| 亚洲午夜一区二区| 国产精品乱码人人做人人爱| 国产日韩一区二区三区| 在线观看日韩精品| 亚洲色图制服丝袜| 久久免费黄色| 欧美日韩综合精品| 国产欧美日韩精品一区| 亚洲国产综合91精品麻豆| 亚洲一级黄色| 玖玖视频精品| 国产精品午夜电影| 亚洲欧洲三级| 欧美亚洲专区| 欧美日韩国产精品一区二区亚洲| 国产日韩综合| 日韩视频一区二区在线观看| 欧美伊人久久大香线蕉综合69| 欧美大胆成人| 国产日韩视频一区二区三区| 亚洲区一区二区三区| 欧美在线三区| 欧美色图五月天| 在线精品国产欧美| 欧美亚洲视频在线观看| 欧美视频一区二区三区在线观看 | 亚洲精品日本| 久久精品30| 国产精品第2页| 亚洲精品在线二区| 久久久久久夜| 国产欧美日韩视频一区二区三区| 夜夜嗨一区二区| 暖暖成人免费视频| 狠狠爱综合网| 亚洲欧美另类国产| 欧美三级视频在线播放| 亚洲激情视频在线观看| 久久久99国产精品免费| 国产精品日韩欧美大师| 99xxxx成人网| 欧美韩国在线| 亚洲电影专区| 久久亚洲影院| 国内精品美女av在线播放| 亚洲中无吗在线| 欧美午夜免费影院| 99视频有精品| 欧美激情一区二区三区四区 | 亚洲电影免费观看高清| 欧美在线播放一区二区| 国产精品毛片a∨一区二区三区|国 | 午夜精品久久久久久久99黑人| 欧美日韩大片| 日韩视频在线一区二区三区| 欧美激情视频免费观看| 在线观看亚洲一区| 久久电影一区| 国产亚洲欧美日韩美女| 欧美一区国产二区| 国产婷婷一区二区| 欧美一区二区视频在线观看2020| 国产精品青草久久久久福利99| 亚洲一区二区动漫| 国产精品久久久| 亚洲视频在线视频| 欧美亚一区二区| 亚洲无限av看| 国产精品美女午夜av| 亚洲女同在线| 国产欧美精品久久| 欧美中文字幕在线播放| 国产婷婷精品| 久久久在线视频| 亚洲高清视频中文字幕| 免播放器亚洲| 亚洲日本一区二区三区| 亚洲毛片在线| 欧美成熟视频| 亚洲免费观看视频| 欧美日韩另类一区| 亚洲一区www| 国产欧美日韩一级| 久久久久免费视频| 亚洲高清免费| 欧美日本国产视频| 亚洲网址在线| 国产亚洲欧美日韩日本| 久久一区二区三区av| 亚洲国产成人午夜在线一区| 欧美激情一区三区| 亚洲天堂成人在线视频| 国产嫩草一区二区三区在线观看 | 国产精品二区二区三区| 欧美一进一出视频| 在线播放亚洲| 欧美日韩成人在线播放| 亚洲男人第一av网站| 国产自产v一区二区三区c| 久久综合伊人77777| 日韩视频在线免费| 国产精品欧美在线| 久久精品国产免费观看| 亚洲国产精品一区制服丝袜 | 麻豆国产精品777777在线| 日韩午夜精品| 国产日韩一区二区三区| 欧美.www| 亚洲免费在线视频| 在线观看欧美激情| 欧美日韩一区二区三区高清| 欧美在线free| 亚洲乱码一区二区| 国产欧美精品一区二区色综合| 久久综合给合久久狠狠狠97色69| 99国产精品99久久久久久| 国产日韩精品在线播放| 欧美国产一区二区在线观看| 午夜精品久久久久影视| 亚洲国内精品| 国产乱码精品一区二区三区av| 久热精品视频在线| 亚洲午夜av| 在线欧美日韩国产| 国产精品网站在线| 欧美成人午夜剧场免费观看| 亚洲一区二区三区在线| 精品福利免费观看| 欧美午夜理伦三级在线观看| 久久综合伊人77777| 亚洲欧美国产精品桃花| 亚洲国产精品成人久久综合一区| 国产精品高精视频免费| 麻豆精品91| 欧美一区二区三区的| 亚洲免费观看高清在线观看| 国产日韩欧美综合在线| 欧美日韩妖精视频| 老鸭窝毛片一区二区三区| 亚洲女同在线| 99riav国产精品| 亚洲第一精品福利| 国产欧美一区二区三区久久人妖 | 激情综合色综合久久| 国产精品国产三级国产普通话蜜臀| 久久最新视频| 欧美一区二区三区视频免费播放| 亚洲精品女人| 黄色免费成人| 国产乱码精品一区二区三区忘忧草 | 久久精品国产成人| 亚洲影音一区| 日韩视频免费观看高清在线视频| 激情欧美一区| 国产色爱av资源综合区| 欧美午夜国产| 欧美精品国产一区二区| 久久影视精品| 久久av最新网址| 亚洲免费一区二区| 一本到12不卡视频在线dvd| 亚洲国产成人在线播放| 国产在线精品一区二区中文| 国产精品久久久久aaaa九色| 欧美精品七区| 欧美电影打屁股sp| 麻豆成人精品| 久久精品一区二区三区不卡| 亚洲欧美国产日韩天堂区| 一区二区三区四区五区精品视频| 亚洲日产国产精品| 在线欧美日韩精品| 尤物99国产成人精品视频| 国产一区在线播放| 国产日韩一区| 国产精品久久一区主播| 欧美日韩免费在线| 欧美日韩1080p| 欧美伦理视频网站| 欧美激情一区二区三区| 欧美成人精品一区二区| 免费在线观看成人av| 美女999久久久精品视频| 久久一综合视频| 久久综合伊人77777| 美女视频网站黄色亚洲| 蜜臀久久99精品久久久画质超高清 | 亚洲大胆av| 亚洲福利久久| 亚洲精选一区| 一区二区三区偷拍|