引用C /CLI中的栈对象总结
创始人
2024-06-21 11:10:14
0

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   
  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++类库设计的基本构思与方法

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...