日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
對(duì)于VisualC++開(kāi)發(fā)工具進(jìn)行學(xué)習(xí)指導(dǎo)

本文主要講述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()
  14. {

由于str是函數(shù)的局部對(duì)象,因此在函數(shù)退出點(diǎn)生存期結(jié)束,此時(shí)auto_ptr的析構(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仍然擁有這正確的值。


名稱欄目:對(duì)于VisualC++開(kāi)發(fā)工具進(jìn)行學(xué)習(xí)指導(dǎo)
網(wǎng)頁(yè)URL:http://www.5511xx.com/article/cdcpheo.html