程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 引用C++/CLI中的棧對象總結

引用C++/CLI中的棧對象總結

編輯:C++入門知識

C++/CLI是.NET平台下的C++語言,當然ISO C++的諸多語法保留下來,棧對象便是其一,但是他的語義發生了變化,通過處理對象的作用返回就會自動釋放其所占用的內存。

大家都知道.NET平台與win32平台最大的差別是托管內存,對C#了解的同志都知道,在C#裡面分有值類型(value type)與引用類型(refrence type),值類型對象均分配在棧中,引用類型的都會分配在托管堆中。

換句話說就是對象的類型決定了其分配的位置,棧還是托管堆。棧內存的回收還是與以往一樣,是確定性的,托管堆內存的回收是由垃圾回收器來負責。然而在這樣的內存模型中,MyClass myClass;這個語句在C++/CLI中的語義會是什麼呢?

眾所周知,高級語言得以出現,主要歸功於編譯器,語義會是怎麼樣,當然也取決於編譯器的編譯結果。下面通過一些簡單的代碼進行講解,請留意代碼中的注釋

  1. private:  
  2. class SingleTonTranslator  
  3. {  
  4. public:  
  5. SingleTonTranslator()  
  6. {  
  7. signal(SignalExceptionClass::GetSignalNumber(),   
  8. SignalHandler);  
  9. }  
  10.  
  11. static void SignalHandler(int)  
  12. {  
  13. throw SignalExceptionClass();  
  14. }  
  15. };  
  16.  
  17. public:  
  18. SignalTranslator()  
  19. {  
  20. static SingleTonTranslator s_objTranslator;  
  21. }  
  22. };  
  23.  
  24. // An example for SIGSEGV  
  25. class SegmentationFault : public ExceptionTracer, public   
  26. exception  
  27. {  
  28. public:  
  29. static int GetSignalNumber() {return SIGSEGV;}  
  30. };  
  31.  
  32. SignalTranslator<SegmentationFault>   
  33. g_objSegmentationFaultTranslator;  
  34.  
  35. // An example for SIGFPE  
  36. class FloatingPointException : public ExceptionTracer, public   
  37. exception  
  38. {  
  39. public:  
  40. static int GetSignalNumber() {return SIGFPE;}  
  41. }; 

但看了無數篇闡述C++復雜性的文章,和爭論C++復雜性的吐沫星子包括我前段時間寫的兩篇關於C++的總結)。我始終都有一個感覺——沒分析透,就跟盲人摸象一樣。正如“Why C++”的一位讀者批評的。

在文章裡面沒有寫明到底哪些是C++的“非本質復雜性”。當然,我自己憑感覺就能知道,而接觸C++一段時間的人大致也能知道,但新手乃至非新手則對我所謂的“非本質復雜性”根本沒有一個具體的認識,這就使得那篇“Why C++”脫離了原本的意圖——面向所有C++使用者和學習者。

同樣的原因,在寫了“你應當如何學習C++/CLI一文之後,當孟巖先生邀請我給《程序員》寫一個系列的文章,介紹一下我在接觸C++的過程中的態度和認識轉變時,我雖然非常高興的答應了。

但直到現在3個月過去了還是顆粒無收。為什麼?因為我覺得真正本質的問題沒有被清晰的觸摸到;所以直到現在我都沒有動筆,免得廢話說了一大堆,除了能被當成小說讀讀之外,對真正考慮是否要學習乃至使用C++/CLI的人未必有什麼實際用處。

  1. 簡介學習C++總結之談
  2. 對C++庫函數進行學習探索總結筆記
  3. C++類庫設計的基本構思與方法
  4. C++語言真的還有市場價值?
  5. C++類庫設計的基本構思與方法

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved