如何通過示例代碼在 C++ 中使用智能指針

      網友投稿 728 2022-05-29

      在 C 和 C++ 編程中,指針非常強大。

      正如我們在C 指針示例文章中所解釋的,指針是保存另一個變量地址的變量,以便我們可以對該變量進行各種操作。

      有時程序員無法想象不使用指針編寫代碼,無論是簡單的二叉搜索樹程序,還是復雜的企業應用程序。

      但是,指針很難管理和掌握,如果處理不當,它們會導致許多問題。

      例如,如果使用不當,可能會導致核心轉儲、懸空指針、空指針異常、內存泄漏等。

      考慮以下代碼片段。當我們在 Study() 方法中遇到異常時會發生什么?

      Geek* geek=new Geek(); Geek->Study(); delete geek; // If study method raises an exception, who would do the above memory clean-up?

      上述問題的解決方案是智能指針。

      智能指針會自動處理許多這些問題。它們基本上是一個行為類似于指針的對象,即包裝一個裸指針但提供額外的功能。所以我們應該使用這些來代替裸指針。

      現在,讓我們了解智能指針如何工作的基礎知識。請注意,這只是用于創建智能指針的各種方法之一。

      基本思想是為裸指針創建一個包裝器,并重載一些將使用的運算符, * , -> 自動清理部分將由類的析構函數處理。

      #include class Ptr { int *ptr; public: explicit Ptr(int *p = NULL) { ptr = p; } ~Ptr() { delete(ptr); } int &operator *() { return *ptr; } }; int main() { Ptr ptr(new int()); *ptr = 4; cout << *ptr; return 0; }

      如何通過示例代碼在 C++ 中使用智能指針

      在這段代碼中,我們不需要在使用動態分配的變量后釋放內存。

      這顯示了實現背后的基本思想。您可以使用模板庫輕松地使其通用。

      另一個想法是基于共享指針中使用的引用計數,它用于共享對象的所有權。

      每有一個新的指針指向這個對象,引用對象就加一,當指針釋放對象的所有權時,當最后一個指向它的指針釋放所有權時,對象自動銷毀。

      代碼示例:

      #include class Ptr { int *ptr; int count; public: explicit Ptr(int *p = NULL) { ptr = p; Count++; } ~Ptr() { count--; If(count==0) delete(ptr); } int &operator *() { return *ptr; } }; int main() { Ptr ptr(new int()); *ptr = 4; cout << *ptr; return 0; }

      上面的代碼展示了如何使用引用計數來實現智能指針的基本思想。

      您可以修改上面的代碼使其通用并編寫您自己的智能指針并使用它。

      C 語言 C++ 數據結構 匯編語言

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:【愚公系列】2021年11月 面試題 WPF
      下一篇:云資源是什么意思?有什么特點?
      相關文章
      亚洲制服在线观看| 中文字幕亚洲综合精品一区| 国产成人精品日本亚洲11| 亚洲午夜久久久精品影院| 亚洲美女又黄又爽在线观看| 在线亚洲午夜理论AV大片| 久久久青草青青国产亚洲免观| 国产亚洲精品成人久久网站| 18禁亚洲深夜福利人口| 精品国产日韩亚洲一区在线| 亚洲欧美国产日韩av野草社区| 亚洲日本乱码卡2卡3卡新区| 亚洲日本久久一区二区va| 亚洲av无码国产综合专区 | 国产亚洲蜜芽精品久久| 久久久久亚洲精品无码网址色欲| 亚洲爆乳少妇无码激情| 亚洲AV无码一区二区三区电影| 亚洲a∨无码一区二区| 亚洲&#228;v永久无码精品天堂久久| 久久精品国产亚洲av天美18| 国产亚洲综合一区二区三区| 亚洲性日韩精品一区二区三区| 中文字幕亚洲综合久久菠萝蜜 | 亚洲国产中文在线视频| 2019亚洲午夜无码天堂| 亚洲熟妇无码一区二区三区| 亚洲AV日韩AV无码污污网站| 亚洲精品人成无码中文毛片| 亚洲一区二区三区影院 | 亚洲精品乱码久久久久久V| 看亚洲a级一级毛片| 亚洲一区二区高清| 精品亚洲永久免费精品| 亚洲天堂中文字幕| 亚洲精品人成网在线播放影院| 亚洲成aⅴ人片久青草影院按摩| 亚洲国产中文v高清在线观看| 亚洲区小说区图片区QVOD| 亚洲视频在线观看一区| 亚洲免费观看网站|