中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

自己搭建服務(wù)器做網(wǎng)站91手機用哪個瀏覽器

自己搭建服務(wù)器做網(wǎng)站,91手機用哪個瀏覽器,武漢互聯(lián)網(wǎng)企業(yè)排名,免費個人網(wǎng)站建設(shè)公司文章目錄 RAII一、auto_ptr二、unique_ptr三、shared_ptrshared_ptr的循環(huán)引用問題 四、weak_ptr總結(jié) RAII RAII就是將資源交給一個對象管理,這個對象能進行正常的管理和釋放資源。 一、auto_ptr auto_ptr的問題是:在拷貝構(gòu)造和賦值重載時&#xff0c…

文章目錄

  • RAII
  • 一、auto_ptr
  • 二、unique_ptr
  • 三、shared_ptr
    • shared_ptr的循環(huán)引用問題
  • 四、weak_ptr
  • 總結(jié)



RAII

RAII就是將資源交給一個對象管理,這個對象能進行正常的管理和釋放資源。

一、auto_ptr

auto_ptr的問題是:在拷貝構(gòu)造和賦值重載時,會將自己資源的管理權(quán)轉(zhuǎn)移給對方。

template<class T>
class auto_ptr
{
public:auto_ptr(T* ptr):_ptr(ptr){}T& operator*(){return *_ptr;}T* operator->(){return _ptr;}//ap3(ap1)auto_ptr(auto_ptr<T>& ap):_ptr(ap._ptr){ap._ptr = nullptr;//必須置空,否則兩個指針對象管理同一塊空間,會調(diào)用析構(gòu)兩次}operator=(auto_ptr<T>& ap){_ptr = ap._ptr;ap._ptr = nullptr;}~auto_ptr(){delete _ptr; // _ptr是指針,是內(nèi)置類型,默認生成的析構(gòu)函數(shù)不處理//自定義類型調(diào)用它自己的析構(gòu)_ptr = nullptr;}
private:T* _ptr;
};

這個auto_ptr實際不會用,太挫了。
但面試可能要手撕,也要會。

二、unique_ptr

unique_ptr 簡單粗暴地禁止了拷貝和賦值重載,那就解決了上面auto_ptr的管理權(quán)轉(zhuǎn)移問題了。

template<class T>class unique_ptr{public:unique_ptr(T* ptr):_ptr(ptr){}T& operator*(){return *_ptr;}T* operator->(){return _ptr;}unique_ptr(unique_ptr<T>& up) = delete;unique_ptr<T>& operator=(unique_ptr<T>& up) = delete;~unique_ptr(){delete _ptr; // _ptr是指針,是內(nèi)置類型,默認生成的析構(gòu)函數(shù)不處理//自定義類型調(diào)用它自己的析構(gòu)_ptr = nullptr;}private:T* _ptr;};

所以unique_ptr就比較適用于,一個指針獨占一個資源的情況。

三、shared_ptr

shared_ptr使用了引用計數(shù)器,最開始new對象時,計數(shù)器為1。
而當其他的同類型的指針對象也指向該對象時,計數(shù)器+1。
當有指針對象調(diào)用析構(gòu)函數(shù)時,判斷計數(shù)器是否為0,如果不為0,表明我這個對象還有其他的shared_ptr在管理,不需要delete,讓計數(shù)器-1即可。
如果計數(shù)器為0,表明當前的shared_ptr是最后一個指針對象管理資源了。就delete。

shared_ptr解決了auto_ptr的管理權(quán)轉(zhuǎn)移問題,也解決了unique_ptr的不讓拷貝和賦值的問題。

注意的問題:

  • 1.不能賦值給自己,否則計數(shù)器會++。
    還有一個問題:默認的析構(gòu)函數(shù)的處理方式是delete ptr。
    如果指針管理的資源是T[],或者是fopen,或者是malloc的呢?
    如果還使用默認的處理方式delete ptr,就會出現(xiàn)問題。
    資源是T[],就得用delete[] ,是fopen,就得用fclose,是malloc,就得用free。
    所以在傳參的時候,就需要傳處理方法過來了。(可以傳對象的方法,可以傳lambda,可以傳包裝器。
    所以就需要將析構(gòu)函數(shù),設(shè)置成一個對象/包裝器,調(diào)用的就是傳進來的析構(gòu)方法。
  • 2.實現(xiàn)賦值重載的時候,有很多細節(jié)。
    • 不能自己給自己賦值
    • 在把對方賦值給自己之前,需要把自己所指向的計時器減減,因為我要只向其他的計時器了。如果減減后的計時器為0,說明這塊資源只有我一個指針在管理,現(xiàn)在我要只想其他資源,所以我要先釋放我現(xiàn)在的資源才能去指向其他資源,否則就會出現(xiàn)內(nèi)存泄露問題。
      在這里插入圖片描述
template<class T>class shared_ptr{public://1) 使用定制刪除器,解決一個當new []時,需要delete []的問題//2) 還有 使用malloc時,需要free配對//3) 使用fopen,需要fclose配對template<class D>shared_ptr(T* ptr,D del):_ptr(ptr),_pcount(new int(1)),_del(del){}//然而這里有一個問題,模板D不是全局的,而是只針對這個構(gòu)造函數(shù)//所以應(yīng)該如何創(chuàng)建_del對象呢?//使用包裝器//function <void(T*)> _del;//因為不管是上面三種情況的哪一種,共同點都是使用的仿函數(shù)的返回值都是void,指針類型都是T*T& operator*(){return *_ptr;}T* operator->(){return _ptr;}//sp3(sp1)shared_ptr(shared_ptr<T>& sp):_ptr(sp._ptr),_pcount(sp._pcount) //讓他們的引用計數(shù)器指針指向同一個計數(shù)器{++(*_pcount);}//sp5 = sp2shared_ptr<T>& operator=(shared_ptr<T>& sp){//不能自己賦值給自己,否則引用計數(shù)器會++//這樣判斷是可以的,只要不同的對象指向同一個資源空間,這幾個對象之間的賦值都是相當于自己給自己賦值if(_ptr == sp._ptr)  //if (_pcount == sp._pcount) //這也可以{return *this;}//賦值前,需要將之前的計數(shù)器--,如果計數(shù)器為0,就釋放資源//因為我要指向其他資源了,我原來的資源的計數(shù)器當然要--if (--(*sp._pcount) == 0){_del(sp._ptr);delete sp._pcount;}_ptr = sp._ptr;_pcount = sp._pcount;++(*_pcount);return *this;}~shared_ptr(){if (--(*_pcount) == 0){_del(_ptr);delete _pcount;_pcount = nullptr;_ptr = nullptr;}}T* get() const {return _ptr;}int use_count() const {return *_pcount;}private:T* _ptr;int* _pcount;//包裝器//包裝器包裝的_del是D類型,這個D也不知道是什么類型,//包裝器可以包裝仿函數(shù),包裝對象的方法等。//如果只是普通的指針析構(gòu),那就給一個缺省。function <void(T*)> _del = [](T* ptr) {delete ptr; }; //dzt::shared_ptr<int> svr(new int); //這樣的方式,就是沒傳處理方式,那默認就是用缺省。//dzt::shared_ptr<int> svr(new int[10],[](int* ptr){delete[] ptr};//這樣的傳參方式,就用delete[]解決};

shared_ptr的循環(huán)引用問題

在這里插入圖片描述
循環(huán)引用問題是兩個節(jié)點的shared_ptr指針互相指向的時候,引用計數(shù)器都會+1,這就出現(xiàn)了互相的計數(shù)器都是2.在析構(gòu)時,都變成1,此時就出現(xiàn)了,到底誰先析構(gòu)的問題。
就一直死循環(huán)了。

不過,shared_ptr能解決日常生活99%的問題,它只有一個缺點,就是循環(huán)引用問題。

解決辦法:weak_ptr,weak_ptr是專門解決循環(huán)引用這個問題的。
weak_ptr沒有RAII,沒有引用計數(shù),不參與對象資源的管理和釋放,只是一個簡單的訪問資源的操作。

四、weak_ptr

template<class T>class weak_ptr{public:weak_ptr():_ptr(nullptr){}weak_ptr(T* ptr):_ptr(ptr){}//weak_ptr必須支持一個shared_ptr構(gòu)造weak_ptr的構(gòu)造函數(shù)weak_ptr(const shared_ptr<T>& sp):_ptr(sp.get()){}weak_ptr<T>& operator=(const shared_ptr<T>& sp){//類外面無法直接訪問類的私有成員_ptr = sp.get();return *this;}//weak只支持訪問資源的操作T& operator*(){return *_ptr;}T* operator->(){return _ptr;}//weak_ptr不參與對象資源的管理和釋放,所以沒有析構(gòu)函數(shù)private:T* _ptr;};

總結(jié)

本文講述了幾個智能指針的優(yōu)缺點和模擬實現(xiàn)。

http://www.risenshineclean.com/news/41107.html

相關(guān)文章:

  • 網(wǎng)站優(yōu)化主旨百度廣告推廣收費標準
  • 武漢專業(yè)網(wǎng)站建設(shè)zz51上海網(wǎng)站制作開發(fā)
  • 競網(wǎng)做的網(wǎng)站交換鏈接營銷成功案例
  • 做網(wǎng)站與考研學(xué)技術(shù)包分配的培訓(xùn)機構(gòu)
  • WordPress方糖無錫網(wǎng)站建設(shè)優(yōu)化公司
  • 專業(yè)的團隊網(wǎng)站建設(shè)引擎搜索入口
  • 室內(nèi)裝修設(shè)計圖紙seo快速軟件
  • 外國人做外貿(mào)都會瀏覽哪些網(wǎng)站焊工培訓(xùn)內(nèi)容有哪些
  • 網(wǎng)站建設(shè)常用代碼營銷策劃36計
  • 直播視頻網(wǎng)站如何做網(wǎng)站策劃
  • 佛山專業(yè)做企業(yè)網(wǎng)站上海今天最新發(fā)布會
  • 吉 360 網(wǎng)站建設(shè)如何做好精準營銷
  • 網(wǎng)站客服工作內(nèi)容重慶網(wǎng)站建設(shè)哪家好
  • 凡客專賣店網(wǎng)站優(yōu)化入門
  • 安徽國貿(mào)集團網(wǎng)站建設(shè)沈陽網(wǎng)站推廣優(yōu)化
  • 合肥專業(yè)做網(wǎng)站的互聯(lián)網(wǎng)域名注冊查詢
  • 做網(wǎng)站拍攝照片用什么佳能相機好網(wǎng)站優(yōu)化課程培訓(xùn)
  • 哪個網(wǎng)站可以做社工試題網(wǎng)絡(luò)服務(wù)器
  • 湖北住房和城鄉(xiāng)建設(shè)委員會網(wǎng)站東莞市民最新疫情
  • 三門峽集團網(wǎng)站建設(shè)愛站網(wǎng)關(guān)鍵詞查詢工具
  • 有沒有人與動物做的電影網(wǎng)站自己做網(wǎng)站怎么做
  • 自適應(yīng)全屏網(wǎng)站競價排名名詞解釋
  • 網(wǎng)站建設(shè)網(wǎng)站排名優(yōu)化金牌服務(wù)搜索引擎排名影響因素有哪些
  • 房屋網(wǎng)簽查詢系統(tǒng)官方網(wǎng)站知乎推廣
  • 個人網(wǎng)站怎么做推廣好口碑關(guān)鍵詞優(yōu)化
  • 深圳市網(wǎng)站維護seo短視頻網(wǎng)頁入口
  • 營銷公關(guān)seo關(guān)鍵詞找29火星軟件
  • wordpress博客實戰(zhàn)青島百度整站優(yōu)化服務(wù)
  • 網(wǎng)站圖文列表seo優(yōu)化快排
  • 寧波網(wǎng)站建設(shè) 聯(lián)系哪家百度seo推廣免費