真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

智能指針VC版-創(chuàng)新互聯(lián)

1、智能指針

創(chuàng)新互聯(lián)專注于醴陵企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,購(gòu)物商城網(wǎng)站建設(shè)。醴陵網(wǎng)站建設(shè)公司,為醴陵等地區(qū)提供建站服務(wù)。全流程按需求定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

 VC版  Linux下的STL 2種智能指針

 boost庫(kù)下的:scoped_ptr、scoped_array、shared_ptr、shared_array、weak_ptr、instrusive_ptr 6種智能指針;

 boost庫(kù)下是極大的充裕了標(biāo)準(zhǔn)C++下的內(nèi)存管理問題,尤其是數(shù)組,寫時(shí)拷貝等得到了極大的補(bǔ)充;

 那么智能指針的含義是什么呢?

 智能:將所申請(qǐng)到的空間交由一個(gè)對(duì)象去管理,預(yù)防程序中出現(xiàn)異常或者由于自己忘記釋放所申請(qǐng)的空間,造成內(nèi)存泄漏的問題。

 指針:通過對(duì)*和->的重載,使其對(duì)象具有指針的特性;

2、VC版的智能指針->auto_ptr

 (1)、通過引入頭文件 #include;

#include
#include
#include  //在VC下調(diào)用智能指針管理空間所必須的頭文件;
using namespace std;

int main(){
    int *p = new int(10);
    auto_ptr pa(p);//新開辟空間的地址交由pa對(duì)象去管理,在對(duì)象消亡時(shí),調(diào)用析構(gòu)函數(shù)釋放空間;將不會(huì)發(fā)生內(nèi)存泄漏;
    return 0;           //因?yàn)閷㈤_辟出來(lái)的空間交由對(duì)象去管理,在最后析構(gòu)時(shí)其內(nèi)部必有delete,去釋放空間;
}

 auto_ptr的內(nèi)部具體實(shí)現(xiàn)過程是怎樣的呢?

 其私有數(shù)據(jù)的成員有:

class auto_ptr{
public:
    ......  //構(gòu)造函數(shù)在此都一一賦值了;
private:
    bool _Owns;  //空間所有權(quán)的管理者,為1釋放空間;
    _Ty *_Ptr;   //保存所開辟空間的地址;
};
int main(){
    int *p = new int(10); //通過new開辟一個(gè)×××空間;
    auto_ptr pa(p);  //將空間的地址交由pa對(duì)象來(lái)管理;
    cout<<*pa<

此時(shí)的模型如下:

智能指針 VC版

其后就是根據(jù)源碼寫的智能指針的整個(gè)過程并進(jìn)行剖析:

#include
using namespace std;

template   //所管理的空間類型不定,所以用模板
class auto_ptr{       //VC下的空間管理交由auto_ptr這種類進(jìn)行處理
public:
    auto_ptr(_Ty *_P=0) : _Owns(_P!=0),_Ptr(_P){}  //構(gòu)造函數(shù),當(dāng)申請(qǐng)空間成功時(shí),_Owns為1,_ptr也指向那個(gè)空間;
    auto_ptr(const auto_ptr<_Ty> &_Y):_Owns(_Y._Owns),_Ptr(_Y.release()){}//拷貝構(gòu)造函數(shù),進(jìn)行了擁有權(quán)的轉(zhuǎn)移;
    auto_ptr<_Ty>& operator=(const auto_ptr<_Ty> &_Y){  //賦值語(yǔ)句是關(guān)鍵,抓住那4步:
        if(this != &_Y){  //1、判斷自己是否給自己賦值
            if(_Ptr != _Y._Ptr){  //賦值的地址不相等
                if(_Owns)   //要賦的先判斷是否為1
                    delete _Ptr;  //釋放原先空間
            }
            _Owns = _Y._Owns;    
            _Ptr = _Y.release(); //擁有權(quán)的轉(zhuǎn)移;
        }
        return *this;
    }
    ~auto_ptr(){
        if(_Owns)
            delete _Ptr;
    }
public:
    _Ty& operator*(){ //對(duì)*進(jìn)行了運(yùn)算符重載,
        return *_Ptr;  //返回其空間中的內(nèi)容
    }
    _Ty* operator->(){ //對(duì)->進(jìn)行了運(yùn)算符重載,
        return _Ptr;   ////返回其空間的地址
    }
    //_Ty* release(const auto_ptr<_Ty> *const this)  //其改寫后的函數(shù)本質(zhì)
    _Ty* release()const{   //這個(gè)函數(shù)時(shí)進(jìn)行擁有權(quán)的轉(zhuǎn)移;
        ((auto_ptr<_Ty>*)this)->_Owns = false; //因?yàn)閏onst常量,不能更改,所以通過強(qiáng)制類型轉(zhuǎn)換對(duì)其進(jìn)行更改;
        //_Owns = false;
        return _Ptr;  //返回這個(gè)地址
    }
private:
    //mutable bool _Owns;
    bool _Owns;
    _Ty *_Ptr;
};

int main(){
    int *p = new int(10); //開辟了一個(gè)×××空間,交給了p;
    auto_ptr pa(p);  //將開辟出的空間地址交給了pa對(duì)象來(lái)管理;
    cout<<*pa< pa1(pa); //此時(shí)擁有權(quán)的轉(zhuǎn)移;空間交由pa1去管理,不關(guān)pa什么事了;

    auto_ptr pa2;
    pa2 = pa1;  //擁有權(quán)在次轉(zhuǎn)移給pa2對(duì)象,此時(shí)與前面的pa,pa1應(yīng)該沒有什么關(guān)系了;

    return 0;
}

對(duì)賦值語(yǔ)句的兩種模型進(jìn)行畫圖解釋:

_Ptr != _Y._Ptr;  //這種是空間不同下對(duì)象的管理賦值情況:

智能指針 VC版

_Ptr == _Y._Ptr;//此時(shí),只要進(jìn)行擁有權(quán)的交換即可;

智能指針 VC版

3、總結(jié)

 auto_ptr 本質(zhì):對(duì)象,但是用起來(lái)像指針(* ->的重載)

 RAII:將自動(dòng)調(diào)用構(gòu)造函數(shù),在對(duì)象消亡時(shí)在自動(dòng)的調(diào)用析構(gòu)函數(shù),只有這樣才為智能指針的出現(xiàn)提供了可能。

 VC版的實(shí)現(xiàn):擁有權(quán)的轉(zhuǎn)移,_Owns(此成員起的作用)

 缺點(diǎn):在_Owns為1/0時(shí)(這個(gè)牽扯到釋放空間),*pa對(duì)象都可訪問,就是那個(gè)地址還保留著,轉(zhuǎn)移的不徹底,存在安全隱患!??!

 以上就是我對(duì)VC下auto_ptr智能指針的認(rèn)識(shí)了;

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


文章標(biāo)題:智能指針VC版-創(chuàng)新互聯(lián)
瀏覽地址:http://weahome.cn/article/jshhi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部