在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++智能指針的學習方法介紹

Q4MP_gh_c472c21 ? 來源:CSDN博客 ? 作者:CSDN博客 ? 2020-09-02 13:54 ? 次閱讀

一、智能指針的學習:

1、內存泄漏:

關于內存泄漏這個問題,一般都會牽扯到指針這個話題,也就是我們常說的動態內存分配;然而在程序員手動進行堆空間的分配時(指針無法控制所指堆空間的生命周期,),往往在寫完程序的時候,程序員一不小心就忘了釋放已經手動分配的內存大小,導致軟件Bug不斷(也就是內存泄漏)。

C++語言里面又沒有垃圾回收的機制(不像高級語言Java有自動的垃圾回收機制,),所以程序員在寫程序的時候,經常會發生剛才上面說的那種情況,這里我們來看一個例子:

#include 《iostream》

#include 《string》

using namespace std;

class Test

{

int i;

public

Test(int i)

{

this-》i = i;

}

int value()

{

return i;

}

~Test()

{

}

};

int main()

{

for(int i=0; i《5; i++)

{

Test* p = new Test(i);

cout 《《 p-》value() 《《 endl;

}

return 0;

}

輸出結果:

txp@ubuntu:~$ 。/a.out

0

1

2

3

4

注解:上面分配的堆空間,沒有釋放掉

2、我們需要什么?

需要一個特殊的指針: 智能指針對象,通過類的普通構造函數完成;

指針生命周期結束的時候,主動釋放堆空間

一片堆空間最多只能由一個指針標識:避免多次釋放內存,通過拷貝構造函數和賦值操作符完成;

杜絕指針運算和指針比較

3、智能指針的使用:

重載指針特征操作符(-》和*)

只能通過類的成員函數重載

重載函數不能使用參數

只能定義一個重載函數

代碼實踐:

#include 《iostream》

#include 《string》

using namespace std;

class Test

{

int i;

public:

Test(int i)

{

cout 《《 “Test(int i)” 《《 endl;

this-》i = i;

}

int value()

{

return i;

}

~Test()

{

cout 《《 “~Test()” 《《 endl;

}

};

class Pointer

{

Test* mp;

public:

Pointer(Test* p = NULL)// 1,智能指針對象,通過類的普通構造函數完成;

{

mp = p;

}

Pointer(const Pointer& obj)//避免多次釋放內存,通過拷貝構造函數和賦值操作符完成;

{

mp = obj.mp;// 傳遞堆空間的控制;

const_cast《Pointer&》(obj).mp = NULL;//初始化對象不管之前的;堆空間了,做所有權的轉移,保證堆空間最多只能由一個對象被標識;

}

Pointer& operator = (const Pointer& obj)

{

if( this != &obj )

{

delete mp;

mp = obj.mp;

const_cast《Pointer&》(obj).mp = NULL;

}

return *this;

}

Test* operator -》 () // 返回指針,準備指示;

{

return mp;

}

Test& operator * () // 解引用,返回對象;

{

return *mp;

}

bool isNull()

{

return (mp == NULL);

}

~Pointer()

{

delete mp;

}

};

int main()

{

Pointer p1 = new Test(0);

cout 《《 p1-》value() 《《 endl;

Pointer p2 = p1;

cout 《《 p1.isNull() 《《 endl;

cout 《《 p2-》value() 《《 endl;

return 0;

}

輸出結果:

txp@ubuntu:~$ 。/a.out

Test(int i)

0

1

0

~Test()

總結提示:智能指針是一個類,這個類的構造函數中傳入一個普通指針,析構函數中釋放傳入的指針。智能指針的類都是棧上的對象,所以當函數(或程序)結束時會自動被釋放

二、總結:

指針特征操作符(-》和*)可以被重載

重載指針特征符能夠使用對象代替指針

智能指針只能用指向堆空間中的內存

智能指針的意義在于最大程度的避免內存問題

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C++
    C++
    +關注

    關注

    22

    文章

    2113

    瀏覽量

    73742

原文標題:C++之智能指針的學習總結

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    初學者該如何學習C++

    的錯誤學習方法,很多人認為學習方法真的是一抓一大把,關于這些編程語言的學習方法,程序員總是非常苦惱,想要找到一條符合自己學習的道路其實并沒有想象中那么容易,初學者該如何
    發表于 05-22 16:41

    嵌入式學習方法步驟是什么?

    `嵌入式學習方法步驟是什么?我看一些初學者問的很多,分享一下。1.Linux基礎及C語言高級學習Linux基礎及C語言,對嵌入式C語言有一定
    發表于 10-22 15:23

    學習C++方法以及C++的就業方向

    學習方向:嵌入式+人工智能嵌入式是一門技術學習目標1.嵌入式開發概述;(面向對象在嵌入式開發中角色)2.嵌入式Linux C++編程;(C++
    發表于 12-24 07:32

    模擬電子電路的學習方法

    模擬電子電路的學習方法
    發表于 08-07 15:49 ?254次下載
    模擬電子電路的<b class='flag-5'>學習方法</b>

    ZigBee 簡介和學習方法

    zigbee簡介以及學習方法,ZigBee的歷史發展前景。
    發表于 04-15 14:07 ?14次下載

    AVR單片機學習方法詳解

    詳細介紹AVR單片機學習方法,很適合初學者!
    發表于 05-16 17:15 ?3次下載

    C指針_CC++經典著作

    C指針_CC++經典著作,感興趣的小伙伴們可以瞧一瞧。
    發表于 11-16 18:32 ?0次下載

    C++實驗--指針

    C++實驗--指針
    發表于 12-30 14:50 ?1次下載

    C++指針學習建議

    C++指針學習建議
    發表于 03-31 15:53 ?3次下載

    C++指針學習建議

     一。對于眾多人提出的c/c++指針難學的問題做個總結:
    發表于 11-07 17:13 ?8次下載
    <b class='flag-5'>C++</b><b class='flag-5'>指針</b>的<b class='flag-5'>學習</b>建議

    C++封裝:this指針

    C++封裝:this指針
    的頭像 發表于 06-29 14:37 ?3491次閱讀
    <b class='flag-5'>C++</b>封裝:this<b class='flag-5'>指針</b>

    CC++經典著作《C指針

    CC++經典著作《C指針
    發表于 01-17 09:46 ?0次下載

    C++的引用和指針

    之前的文章我們已經介紹C++中的基本類型如int,bool和double等,除了基本類型C++還有一些更復雜的數據類型復合類型,所謂的復合類型就是通過其他類型定義的類型,本篇文章我們將會著重
    的頭像 發表于 03-17 14:00 ?656次閱讀

    rust語言基礎學習: 智能指針之Cow

    Rust中與借用數據相關的三個trait: Borrow, BorrowMut和ToOwned。理解了這三個trait之后,再學習Rust中能夠實現寫時克隆的智能指針Cow。
    的頭像 發表于 05-22 16:13 ?2968次閱讀

    C++智能指針的底層實現原理

    C++智能指針的頭文件: #include 1. shared_ptr: 智能指針從本質上來說是一個模板類,用類實現對指針對象的管理。 template class shared_pt
    的頭像 發表于 11-09 14:32 ?774次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>智能指針</b>的底層實現原理
    主站蜘蛛池模板: 免费看特级淫片日本| 一本久草| 色香视频首页| 特黄特色大片免费播放器9| 69日本xxxxxxxxx98| 午夜视频在线观看视频| 久久日精品| 激情啪啪网站| www.四虎在线| 六月婷婷七月丁香| 色多多免费视频| 欧美一级黄色录相| 激情综合网激情| videsgratis欧美另类| 午夜大片网| 一级视频在线| 视频综合网| 大喷水吹潮magnet| 久久久久国产午夜| 日日爽视频| 手机在线你懂得| 国产真实灌醉美女疯狂弄| 日韩天天干| 国产精品美女久久久久网站| 黄色国产在线视频| 伊人久久大香线蕉观看| 日本色午夜| 欧美一级高清片在线| 黄色大片毛片| 天天做天天爱夜夜想毛片| 午夜看看| aa在线观看| 五月天激情在线| 狠狠干2021| 高清不卡一区二区三区| 久久99国产精品免费观看| 亚洲1页| 天堂在线.www资源在线观看| 一区二区三区精品国产欧美| 色视频在线观看| 国产免费一级高清淫曰本片|