成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何實現auto_ptr

這篇文章主要為大家展示了“如何實現auto_ptr”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“如何實現auto_ptr”這篇文章吧。

我們一直強調成都網站建設、網站設計對于企業(yè)的重要性,如果您也覺得重要,那么就需要我們慎重對待,選擇一個安全靠譜的網站建設公司,企業(yè)網站我們建議是要么不做,要么就做好,讓網站能真正成為企業(yè)發(fā)展過程中的有力推手。專業(yè)網站建設公司不一定是大公司,創(chuàng)新互聯(lián)建站作為專業(yè)的網絡公司選擇我們就是放心。

實現auto_ptr有兩種方法:

第一種方法:在上一篇博客中我已經實現了,主要思想是管理權轉移。

第二種方法:它是我們c++標準庫中以前的一個版本,主要思想是在auto_ptr類中除了有一個指針的成員變量以外還有一個bool類型的成員變量_owner。構造函數中將_owner設為真,表示對象是指針所指向的內存的擁有者,當要賦值時(ap1=ap2),將ap1的_owner置為true,ap2的_owner置為false。

這樣我們析構對象時只要檢查它的_owner是否為true。為真就釋放內存,不為真就不釋放。

主要實現如下:

#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的實現,有人會問:

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

既然舊版本的智能指針實現方式比新版本的要好用,那為什么會被替換呢?

請看下面一段代碼:

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

 if (1)

 {

  AutoPtr<int> ap2(ap1);

 }

 *ap1 = 3;

這段代碼是用舊版本實現的智能指針(ap1)指向一個動態(tài)開辟的內存,然后在if條件語句中又有一個ap2指向這塊內存,我們會知道,根據舊版的智能指針的實現原理,ap1的_owner為false,ap2的_owner為true。那么除了if條件語句的局部作用域,ap2就自動調用析構函數釋放內存,那么當我們在外面*ap1=3時,訪問到的是一塊已經被釋放了的內存,那么程序這時就會出現問題。

如果是新版的auto_ptr,它提供了一個公有成員函數GetPtr(),可以獲取指針_ptr,當發(fā)生這種情況時,它可以先判斷_ptr是否為空,然后才去訪問內存。舊版本這樣做是無用的,因為ap1的_ptr并不為空。

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

分享名稱:如何實現auto_ptr
網站URL:http://jinyejixie.com/article34/ijgdpe.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供外貿網站建設App開發(fā)、網站內鏈、響應式網站、電子商務、網站建設

廣告

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

成都seo排名網站優(yōu)化
茌平县| 卫辉市| 平遥县| 米脂县| 徐汇区| 涪陵区| 武隆县| 兴义市| 谷城县| 九江市| 长治市| 荥经县| 古丈县| 黎城县| 惠州市| 甘孜| 镇原县| 常德市| 开鲁县| 道孚县| 峨山| 石首市| 石阡县| 嘉义县| 章丘市| 荥经县| 佛坪县| 汾西县| 瓦房店市| 黔东| 浦东新区| 娄底市| 湖北省| 渑池县| 邵阳市| 广州市| 平度市| 乐清市| 中超| 军事| 碌曲县|