自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

對(duì)于Visual C++開(kāi)發(fā)工具進(jìn)行學(xué)習(xí)指導(dǎo)

開(kāi)發(fā) 后端
Visual C++和Borland C++ Builder是Windows操作系統(tǒng)上常見(jiàn)的C++開(kāi)發(fā)工具。前者是微軟公司出品的,應(yīng)用廣泛。。。。

本文主要講述Visual C++,怎樣創(chuàng)建Visual C++項(xiàng)目。如何編制Visual C++的代碼,這些內(nèi)容都是一些門戶網(wǎng)站和技術(shù)論壇找到的,中間可能有不少錯(cuò)誤是我沒(méi)有挑出的,歡迎大家指正。

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

例如以下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是函數(shù)的局部對(duì)象,因此在函數(shù)退出點(diǎn)生存期結(jié)束,此時(shí)auto_ptr<string>的析構(gòu)函數(shù)調(diào)用,自動(dòng)銷毀內(nèi)部指針維護(hù)的string對(duì)象(先前在構(gòu)造函數(shù)中通過(guò)new表達(dá)式分配而來(lái)的),并進(jìn)而執(zhí)行string的析構(gòu)函數(shù),釋放為實(shí)際的字符串動(dòng)態(tài)申請(qǐng)的內(nèi)存。在string中也可能管理其他類型的資源,如用于多線程環(huán)境下的同步資源。下圖說(shuō)明了上面的過(guò)程。

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

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

auto_ptr<>只是智能指針的一種,它的復(fù)制行為提供了所有權(quán)轉(zhuǎn)移的語(yǔ)義,即智能指針在復(fù)制時(shí)將對(duì)內(nèi)部維護(hù)的實(shí)際指針的所有權(quán)進(jìn)行了轉(zhuǎn)移,例如:

  1. template < typename T > 
  2. class shared_ptr  
  3. {  
  4. private:  
  5.   class implement  // 實(shí)現(xiàn)類,引用計(jì)數(shù)  
  6.   {  
  7.   public:  
  8.     implement(T* pp):p(pp),refs(1){}  
  9.       
  10.     ~implement(){delete p;}  
  11.       
  12.     T* p; // 實(shí)際指針  
  13.     size_t refs; // 引用計(jì)數(shù)  
  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();  // 計(jì)數(shù)遞減  
  26.   }  
  27.    
  28.    
  29.   shared_ptr(const shared_ptr& rhs)  
  30.     :  _impl(rhs._impl)  
  31.   {  
  32.     increase();  // 計(jì)數(shù)遞增  
  33.   } 

某些時(shí)候,需要共享同一個(gè)對(duì)象,此時(shí)auto_ptr就不敷使用,由于某些歷史的原因,Visual C++的標(biāo)準(zhǔn)庫(kù)中并沒(méi)有提供其他形式的智能指針,走投無(wú)路了嗎?在main()函數(shù)中,先調(diào)用foo1(val),函數(shù)中使用了一個(gè)局部對(duì)象temp,它和val共享同一份數(shù)據(jù),并修改了實(shí)際值。

函數(shù)返回后,val擁有的值同樣也發(fā)生了變化,而實(shí)際上val本身并沒(méi)有修改過(guò)。然后調(diào)用了foo2(val),函數(shù)中使用了一個(gè)無(wú)名的臨時(shí)對(duì)象創(chuàng)建了一個(gè)新值,使用賦值表達(dá)式修改了val,同時(shí)val和臨時(shí)對(duì)象擁有同一個(gè)值,函數(shù)返回時(shí),val仍然擁有這正確的值。

責(zé)任編輯:chenqingxiang 來(lái)源: 博客園
相關(guān)推薦

2010-01-21 10:44:59

Visual C++

2010-01-19 14:54:58

Visual C++

2010-01-26 17:44:32

Visual C++開(kāi)

2010-01-20 11:02:42

C++開(kāi)發(fā)環(huán)境

2010-03-01 15:57:59

Python開(kāi)發(fā)工具

2010-01-12 14:22:26

Visual C++

2010-01-18 15:40:37

Visual C++工

2010-01-12 09:59:08

Visual C++

2010-01-11 10:19:57

C++開(kāi)發(fā)工具

2010-01-08 17:01:46

C++開(kāi)發(fā)工具

2010-01-15 15:13:28

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++標(biāo)準(zhǔn)庫(kù)

2010-01-18 14:41:52

Visual C++開(kāi)

2010-01-18 15:19:41

Visual C++開(kāi)

2017-04-11 08:50:22

應(yīng)用開(kāi)發(fā)云服務(wù)開(kāi)源

2009-08-07 10:53:59

Visual C#Excel
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)