欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何實(shí)現(xiàn)auto_ptr-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了“如何實(shí)現(xiàn)auto_ptr”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“如何實(shí)現(xiàn)auto_ptr”這篇文章吧。

創(chuàng)新互聯(lián)建站長(zhǎng)期為1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為周村企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè),周村網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

實(shí)現(xiàn)auto_ptr有兩種方法:

第一種方法:在上一篇博客中我已經(jīng)實(shí)現(xiàn)了,主要思想是管理權(quán)轉(zhuǎn)移。

第二種方法:它是我們c++標(biāo)準(zhǔn)庫(kù)中以前的一個(gè)版本,主要思想是在auto_ptr類中除了有一個(gè)指針的成員變量以外還有一個(gè)bool類型的成員變量_owner。構(gòu)造函數(shù)中將_owner設(shè)為真,表示對(duì)象是指針?biāo)赶虻膬?nèi)存的擁有者,當(dāng)要賦值時(shí)(ap1=ap2),將ap1的_owner置為true,ap2的_owner置為false。

這樣我們析構(gòu)對(duì)象時(shí)只要檢查它的_owner是否為true。為真就釋放內(nèi)存,不為真就不釋放。

主要實(shí)現(xiàn)如下:

#include<iostream>
using namespace std;
template<class T>
class AutoPtr
{
public:
     AutoPtr(T* ptr)
     :_ptr(ptr)
     , _owner(true)
     {}
     ~AutoPtr()
     {
          if (_owner)
          {
               delete _ptr;
          }
     }
     AutoPtr(AutoPtr<T>& ap)
      :_ptr(ap._ptr)
      , _owner(true)
     {
          ap._owner = false;
     }
     AutoPtr& operator=(AutoPtr<T>& ap)
     {
          if (this != &ap)
         {   
               if (_owner)
               {
                delete _ptr;
               }
           _ptr = ap._ptr;
           _owner = true;
           ap._owner = false;
          }
      return *this;
     }
     T* operator->()
     {
          return _ptr;
     }
     T& operator*()
     {
          return *_ptr;
     }
private:
     T* _ptr;
     bool _owner;
};

看完auto_ptr的實(shí)現(xiàn),有人會(huì)問:

看起來(lái)這種方法更好些,它實(shí)現(xiàn)了可以一般指針的使用方式,可以有多個(gè)指針指向同一塊內(nèi)存,并且都可以訪問這塊內(nèi)存,而我們知道,新版本的auto_ptr的實(shí)現(xiàn)方式(管理權(quán)轉(zhuǎn)移)大的缺點(diǎn)就是不能有幾個(gè)指針指向同一塊內(nèi)存,一個(gè)智能指針只能指向一塊內(nèi)存。

既然舊版本的智能指針實(shí)現(xiàn)方式比新版本的要好用,那為什么會(huì)被替換呢?

請(qǐng)看下面一段代碼:

AutoPtr<int> ap1(new int(1));

 if (1)

 {

  AutoPtr<int> ap2(ap1);

 }

 *ap1 = 3;

這段代碼是用舊版本實(shí)現(xiàn)的智能指針(ap1)指向一個(gè)動(dòng)態(tài)開辟的內(nèi)存,然后在if條件語(yǔ)句中又有一個(gè)ap2指向這塊內(nèi)存,我們會(huì)知道,根據(jù)舊版的智能指針的實(shí)現(xiàn)原理,ap1的_owner為false,ap2的_owner為true。那么除了if條件語(yǔ)句的局部作用域,ap2就自動(dòng)調(diào)用析構(gòu)函數(shù)釋放內(nèi)存,那么當(dāng)我們?cè)谕饷?ap1=3時(shí),訪問到的是一塊已經(jīng)被釋放了的內(nèi)存,那么程序這時(shí)就會(huì)出現(xiàn)問題。

如果是新版的auto_ptr,它提供了一個(gè)公有成員函數(shù)GetPtr(),可以獲取指針_ptr,當(dāng)發(fā)生這種情況時(shí),它可以先判斷_ptr是否為空,然后才去訪問內(nèi)存。舊版本這樣做是無(wú)用的,因?yàn)閍p1的_ptr并不為空。

以上是“如何實(shí)現(xiàn)auto_ptr”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站制作公司行業(yè)資訊頻道!

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開啟,新人活動(dòng)云服務(wù)器買多久送多久。

標(biāo)題名稱:如何實(shí)現(xiàn)auto_ptr-創(chuàng)新互聯(lián)
文章轉(zhuǎn)載:http://www.chinadenli.net/article28/dcdpjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)電子商務(wù)營(yíng)銷型網(wǎng)站建設(shè)品牌網(wǎng)站制作網(wǎng)站改版網(wǎng)站制作

廣告

聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)