欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

c++智能指針怎么用

這篇文章主要介紹“c++智能指針怎么用”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“c++智能指針怎么用”文章能幫助大家解決問題。

錫山ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

        我們?cè)诔绦蜷_發(fā)中,難免會(huì)遇到內(nèi)存泄漏。那么什么是內(nèi)存泄漏呢?就是動(dòng)態(tài)申請(qǐng)堆空間,用完后不歸還。在 C++ 語言中沒有垃圾回收機(jī)制,在后續(xù)的語言如 Java、C# 等高級(jí)語言中就存在垃圾回收機(jī)制,指針無法控制所指堆空間的生命周期。

        下來我們來看個(gè)示例代碼

#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;
    }
};

int main()
{
    for(int i=0; i<5; i++)
    {
        Test* p = new Test(i);
        
        cout << p->value() << endl;
    }
    
    return 0;
}

        我們明顯看到在 main 函數(shù)中只 new 對(duì)象了,而沒有 delete 對(duì)象。我們看看運(yùn)行結(jié)果

c++智能指針怎么用

        我們看到只是進(jìn)行了構(gòu)造函數(shù),并沒有析構(gòu)函數(shù)的打印。也就是說,有內(nèi)存泄漏,但是有人會(huì)說我們的程序還是運(yùn)行結(jié)束了,啥事都沒有。這是因?yàn)檫@個(gè)程序很短,如果程序在長(zhǎng)時(shí)間運(yùn)行后,便會(huì)產(chǎn)生問題,而且這類問題是最難調(diào)試的。

        那么我們就會(huì)思考了:我們到底需要的是一個(gè)什么樣的指針的?需要一個(gè)特殊的指針,在指針生命周期結(jié)束時(shí)能主動(dòng)釋放堆空間。一片堆空間最多只能由一個(gè)指針標(biāo)識(shí),必須杜絕指針運(yùn)算和指針比較。那么解決方案便是重載指針特征操作符(-> 和 *),只能通過類的成員函數(shù)重載,并且重載函數(shù)不能使用參數(shù)它只能定義一個(gè)重載函數(shù)。我們稱之為智能指針,下來我們來看看智能指針到底是什么樣的

#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)
    {
        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(5);
    
    cout << p1->value() << endl;
    
    Pointer p2 = p1;
    
    cout << p1.isNull() << endl;
    
    cout << p2->value() << endl;
    
    return 0;
}

        我們?cè)诔绦蛑卸x了一個(gè) Pointer 類,進(jìn)行了一系列的操作符重載。打印 p1 的值就肯定為 5,接著將 p1 賦值給 p2,那么此時(shí) p1 就應(yīng)該為空了,因?yàn)橐黄臻g只能有一個(gè)標(biāo)識(shí)符。所以在第 78 行打印出的肯定是 1 了,最后打印的 p2 的值也就為 5 了。我們看看編譯結(jié)果

c++智能指針怎么用

關(guān)于“c++智能指針怎么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

本文標(biāo)題:c++智能指針怎么用
分享地址:http://aaarwkj.com/article46/gdedhg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、App設(shè)計(jì)面包屑導(dǎo)航、服務(wù)器托管標(biāo)簽優(yōu)化、域名注冊(cè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
欧美日韩另类综合91| 麻豆精品国产免费av影片| 国产精品粗又长一区| 国产日韩亚洲欧美精品专区| 人人看男人的天堂东京| 国产三级精品av在线| av国产一区二区在线| 亚洲av成人在线观看| 国产精品欧美日韩一区| 小仙女精品经典三级永久| 日韩视频播放一区二区| 在线中文字幕日韩有码| 亚洲国产精品va在线香蕉| 日本国产精品久久一线| 色婷婷精品一区二区三区| av电影国产在线观看| 亚洲av毛片一区二区三区网| 亚洲天堂日韩欧美在线| 日韩精品国产一区二区在线观看 | 精品视频美女肉体亚洲| 国产性生活大片免费看| 欧美精品一区二区久久不卡| 国产日韩欧美国产精品| 亚洲av无毛在线观看| 亚洲精品国产精品粉嫩av| 91午夜精品在线观看| 久久久国产一区二区三区| 岛国大片一区二区三区| 国产精品亚洲精品日韩在线| 亚洲精品成人一区二区| 久久产精品一区二区三区日韩| 国产三级在线观看91| 欧美日韩精品在线二区| 久久国产精品久久国产精品| 国产精品推荐不卡一区| 亚洲狠狠爱一区二区三区| 色偷拍亚洲偷自拍二区| 亚洲精品高清一区二区| 超碰在线免费视频97| 国产亚洲欧美精品在线观看| 国内不卡一区二区三区|