成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

對于Visual C++開發工具進行學習指導

開發 后端
Visual C++和Borland C++ Builder是Windows操作系統上常見的C++開發工具。前者是微軟公司出品的,應用廣泛。。。。

本文主要講述Visual C++,怎樣創建Visual C++項目。如何編制Visual C++的代碼,這些內容都是一些門戶網站和技術論壇找到的,中間可能有不少錯誤是我沒有挑出的,歡迎大家指正。

它將指針包裝成了類,并且重載了反引用(dereference)運算符operator *和成員選擇運算符operator ->,以模仿指針的行為。關于auto_ptr<>的具體細節,參閱《The C++ Standard Library》(中譯本:C++標準庫)。

例如以下Visual C++代碼,

  1. #include < cstring > 
  2. #include < memory > 
  3. #include < iostream > 
  4. class string  
  5. {  
  6. public:  
  7. string(const char* cstr) { _data=new char [ strlen(cstr)+1 ]; strcpy(_data, cstr); }  
  8. ~string() { delete [] _data; }  
  9. const char* c_str() const { return _data; }  
  10. private:  
  11. char* _data;  
  12. };  
  13. void foo()  

由于str是函數的局部對象,因此在函數退出點生存期結束,此時auto_ptr<string>的析構函數調用,自動銷毀內部指針維護的string對象(先前在構造函數中通過new表達式分配而來的),并進而執行string的析構函數,釋放為實際的字符串動態申請的內存。在string中也可能管理其他類型的資源,如用于多線程環境下的同步資源。下圖說明了上面的過程。

  1. auto_ptr < string > str1( new string( < str1 > ) );  
  2. cout << str1->c_str();  
  3. auto_ptr < string > str2(str1); // str1內部指針不再指向原來的對象  
  4. cout << str2->c_str();   
  5. cout << str1->c_str(); // 未定義,str1內部指針不再有效 

現在我們擁有了最簡單的廢料收集機制(我隱瞞了一點,在string中,你仍然需要自己編碼控制對象的動態創建和銷毀,但是這種情況下的準則極其簡單,就是在構造函數中分配資源,在析構函數中釋放資源,就好像飛機駕駛員必須在起飛后和降落前檢查起落架一樣。),即使在foo函數中發生了異常,str的生存期也會結束,C++保證自然退出時發生的一切在異常發生時一樣會有效。

auto_ptr<>只是智能指針的一種,它的復制行為提供了所有權轉移的語義,即智能指針在復制時將對內部維護的實際指針的所有權進行了轉移,例如:

  1. template < typename T > 
  2. class shared_ptr  
  3. {  
  4. private:  
  5.   class implement  // 實現類,引用計數  
  6.   {  
  7.   public:  
  8.     implement(T* pp):p(pp),refs(1){}  
  9.       
  10.     ~implement(){delete p;}  
  11.       
  12.     T* p; // 實際指針  
  13.     size_t refs; // 引用計數  
  14.   };  
  15.   implement* _impl;  
  16.    
  17.    
  18. public:  
  19.   explicit shared_ptr(T* p)  
  20.     :  _impl(new implement(p)){}  
  21.    
  22.    
  23.   ~shared_ptr()  
  24.   {  
  25.     decrease();  // 計數遞減  
  26.   }  
  27.    
  28.    
  29.   shared_ptr(const shared_ptr& rhs)  
  30.     :  _impl(rhs._impl)  
  31.   {  
  32.     increase();  // 計數遞增  
  33.   } 

某些時候,需要共享同一個對象,此時auto_ptr就不敷使用,由于某些歷史的原因,Visual C++的標準庫中并沒有提供其他形式的智能指針,走投無路了嗎?在main()函數中,先調用foo1(val),函數中使用了一個局部對象temp,它和val共享同一份數據,并修改了實際值。

函數返回后,val擁有的值同樣也發生了變化,而實際上val本身并沒有修改過。然后調用了foo2(val),函數中使用了一個無名的臨時對象創建了一個新值,使用賦值表達式修改了val,同時val和臨時對象擁有同一個值,函數返回時,val仍然擁有這正確的值。

責任編輯:chenqingxiang 來源: 博客園
相關推薦

2010-01-21 10:44:59

Visual C++

2010-01-26 17:44:32

Visual C++開

2010-01-19 14:54:58

Visual C++

2010-01-20 11:02:42

C++開發環境

2010-03-01 15:57:59

Python開發工具

2010-01-18 15:40:37

Visual C++工

2010-01-12 09:59:08

Visual C++

2010-01-12 14:22:26

Visual C++

2010-01-11 10:19:57

C++開發工具

2010-01-15 15:13:28

C++概述

2010-01-08 17:01:46

C++開發工具

2010-09-29 14:06:09

Visual Basi

2010-01-13 14:35:10

Visual C++

2010-01-11 11:02:59

Visual C++

2010-01-20 10:49:29

Visual C++界

2010-01-13 10:09:24

C++標準庫

2010-01-18 14:41:52

Visual C++開

2010-01-18 15:19:41

Visual C++開

2009-08-07 10:53:59

Visual C#Excel

2017-04-11 08:50:22

應用開發云服務開源
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产传媒| 欧美精品在线免费观看 | www.久草.com| 国产免费又色又爽又黄在线观看 | 一区二区免费视频 | 免费v片 | 99久久精品免费看国产四区 | 一呦二呦三呦国产精品 | 精品综合久久 | 欧美日韩视频在线 | 日韩欧美在线播放 | 久久久久久网站 | 日韩在线播放视频 | 午夜精品 | 日本一区二区不卡 | 91玖玖| 欧美vide | 亚洲视频第一页 | 亚洲精品综合一区二区 | 老司机成人在线 | 国产精品久久 | 国产精品久久久久久久久久 | 日本a视频 | 日本黄色片免费在线观看 | 天天搞夜夜操 | 欧美一区二区黄 | 91精品国产综合久久精品图片 | 久久亚洲欧美日韩精品专区 | 国产激情自拍视频 | 国产一区久久久 | 韩日视频在线观看 | 国产午夜精品久久久久 | 啪啪免费网 | 中文字幕精品视频在线观看 | 中文字幕日韩欧美一区二区三区 | 亚洲一区二区电影在线观看 | 玖玖久久| 欧美日韩久久精品 | 毛色毛片免费看 | 一区二区三区在线免费观看视频 | 久久成人一区 |