C++托管扩展

✍ dations ◷ 2025-04-28 16:52:38 #C++托管扩展

C++托管扩展(Managed Extensions for C++)是对C++的一个属性和关键字的扩展,以便于在微软公司的.NET Framework进行编程。它也经常被称为托管C++。2002年由微软发布。

托管C++并非独立存在的编程语言,而仅仅是微软对C++的一个语法扩展,允许C++程序员在.NET框架和CLR的基础上进行托管编程。与C#和Visual Basic .NET相比,其主要优点是旧代码可以比较快地移植到新的平台上,而且即使不完全重写代码,也可以通过互操作在同一个模块中无缝集成托管和非托管代码,从新的.Net框架中获益。

.Net框架封装了大量的API,例如网络访问、字符串操作、数据访问、XML服务、图形界面控件库、邮件服务、加密服务、文件输入/输出,甚至是WMI管理,也使得应用程序员可以编写更加简洁的代码。目前只有托管C++及其后继者C++/CLI可以做到无缝集成托管和非托管代码,而在托管代码中调用COM的速度又相当慢,所以经常被用于其他语言和非托管代码之间的桥梁。

托管C++允许程序员编写托管代码,内存管理的工作现在可以让CLR去自动处理,访问时也增加了类型检查,减少了缓冲区溢出和内存泄漏的危险,增加了程序的稳定性,但是在性能敏感的应用中,庞大的.NET框架和缓慢的自动内存管理并不是必要的,传统非托管代码仍然是一些人的首选。

在面向对象编程方面,主要的变化是对多重继承的限制,这是因为CLR的限制和内存管理的需要。一个托管类不能多继承基类。同时,类属性和微软中间语言(MSIL)的引入也使得托管类可以在其他语言中使用和继承。

与此同时,托管C++引入了大量的关键字和语义转换,减少了代码的可读性和明确性。缺少在很多语言中都支持的泛型和for each语句也增加了其他语言的程序员转向托管C++的困难。在其后继者C++/CLI中泛型和for each语句才被支持。

以下列出面向对象编程与 unmanaged C++ 之间的差异性。

//hello.cpp//new using directive#using <mscorlib.dll>//another using namespace directive.using namespace System;int main()  {  Console::WriteLine("Hello");  return 0;}

一个新的前置处理引导(preprocessor directive)

   #using <mscorlib.dll>

这是必须的。此外 #using directives 必须用 namespace 的方法来 import 更多的库(libraries),像是 Base Class Library,例如:

  #using <System.Windows.Forms.dll>

以及

  using namespace System::Windows::Forms;

来使用 Windows Forms。

   cl.exe hello.cpp /clr

/clr enables any code referencing the .NET Framework to be compiled as CIL。

//gc.cpp#using <mscorlib.dll>__gc class gc  {  int* i;  char* g;  float* j;};int main()  {  while(true)  {    gc* _gc = new gc();  }  return 0;}

比较 Managed C++

以下列出 Managed C++ 与其它编程语言在类似观念上的差异。

缺点

优点

缺点



相关

  • 显宗朝鲜显宗(朝鲜语:조선 현종/朝鮮 顯宗 Joseon Hyeonjong;1641年5月13日-1674年9月17日)是朝鲜王朝的第18代君主,1659年至1674年在位。讳李棩(朝鲜语:이연/李棩 Yi Yeon),字景直。孝宗
  • UH-1UH-1 Iroquois,是美国的贝尔直升机公司所设计制造的军用中型通用直升机,根据美军命名传统正式命名为“Iroquois”(为北美原住部族之一的伊洛魁部落名称),而贝尔直升机公司另起了
  • 韦伯分布威布尔分布(Weibull distribution)是可靠性分析和寿命检验的理论基础。例如,可以使用此分布回答以下问题:预计将在老化期间失效的项目所占的百分比是多少?例如,预计将在 8 小时老
  • 维托尔德·卢托斯瓦夫斯基维托尔德·罗曼·卢托斯瓦夫斯基(波兰语:Witold Roman Lutosławski,1913年1月25日-1994年2月7日),波兰作曲家、指挥家。早年在华沙音乐学院学习钢琴及作曲,受波兰民间音乐影响。二
  • 调合油调合油是指含有两种或两种食用油种的油品,油脂组成的比例非常多样化,以植物性调合油较常见,例如芥花油与高油酸葵花油调合、棕榈油与橄榄油调合等。2009 年世界卫生组织(World
  • 刘桓 (财政税收专家)刘桓(1955年1月-),男,天津人,中国财政税收专家,中央财经大学税务学院副院长、教授,国务院参事。
  • 威廉·D·莱希威廉·丹尼尔·莱希(William Daniel Leahy,1875年5月6日-1959年7月20日),美国海军五星上将,曾任美国海军作战部长(1937年-1939年)、波多黎各总督(1939年-1940年)、美国驻法国大使(1941
  • 2011年西安世界园艺博览会2011年西安世界园艺博览会,简称西安世园会,是一个已举行过的世界园艺博览会;于2011年4月28日至10月22日在中华人民共和国西安市举行。这是中国第三次举办的国际园艺博览会,也是
  • 穆罕默德·巴尔金多穆罕默德·萨努西·巴尔金多(阿拉伯语:محمد باركينطو‎,1959年4月20日-2022年7月5日),尼日利亚政治人物,曾任石油输出国组织秘书长。1959年生于阿达马瓦州约拉。1981年毕业于扎里亚艾哈迈杜·贝洛大学,获得政治学学士学位。1988年获得英国牛津大学石油经济学硕士学位。1991年获得华盛顿大学工商管理硕士学位。长期在尼日利亚国家石油公司工作。1986年,开始担任尼日利亚驻石油输出国组织代表团成员。1993年至2008年,担任尼日利亚驻石油输出国组织代表。2006年曾任石油输出国组织
  • 威廉·沃尔夫·比尔威廉·沃尔夫·比尔(Wilhelm Wolff Beer)是一位来自普鲁士柏林的银行家暨天文学家,歌剧作曲家贾科莫·梅耶贝尔的同父异母弟弟。比尔的名声源于他的爱好-天文学。他在柏林米特区蒂尔加滕建立了一座安装有9.5厘米折射望远镜私人天文观察台。并在1834年-1836年与约翰·海因里希·冯·马德勒合作绘制了第一幅精确的月面图(标题为《Mappa Selenographica》),1837年又出版了《月球宇宙性和个体性比较月面学》(Der Mond nach seinen kosmischen und i