首页 > 代码库 > C++/CLI 托管C++的数据类型介绍【2】
C++/CLI 托管C++的数据类型介绍【2】
CLI:
公共语言基础构造(Common Language Infrastructure),是由ECMA(欧洲计算机制造商协会)成立专家组,并结合ISO
标准、开发形成的一个可扩展语言标准。
C++/CLI目的是把C++带到CLI平台上,使C++能够在CLI平台上发挥最大的能力,而并非把C++约束在CLI平台(CLI本身也是
ISO标准化的)上。相反,原来标准C++的能力丝毫没有减弱,并且,通过C++/CLI中的标准扩展,C++具有了原来没有的一系列
的.NET特性以及动态编程能力。这些扩展并非是专有的,而是以一种标准的方式呈现。
值类型(value type)
[1] 常见类型
内置值类型(基本数据类型)、自定义值类型、枚举类型等;
[2] 说明
值类型既可以像 C++ 程序中那样使用堆栈语义在堆栈内存直接创建或通过类型指针* 使用 new 在堆内存中动态创建值类型对
象;也允许通过定义值类型的句柄 ^,使用gcnew 在托管堆内存中创建值类型托管对象。
引用类型(ref type)
[1] 常见类型
如:内置引用类型(Object和String)、指针(追踪句柄tracking handle、内部指针interior pointer、固定指针pinning
pointer)、自定义引用类型、数组类型、装箱值类型、委托、接口等。
[2] 说明
通过类型的句柄 ^(类对象的“跟踪指针”,^ 发音为“hat”)用gcnew运算符在托管堆内存创建类型的托管对象,也可以
将句柄 ^指向一个已经存在的同类型的托管对象。系统的垃圾收集器通过句柄 ^,自动地跟踪托管对象的使用状态,并且在托管对
象不再被使用时,自动撤消和回收托管对象所占用的托管内存的空间,程序员可以无须自己管理。
注意:
C++/CLI 扩展同时提供了确定性和非确定性销毁托管对象内存的功能,支持使用delete对gcnew 动态创建类型的托管对象执
行撤消的用法,该语法还包括使用delete[]销毁一个托管数组所占用的内存,这个概念称为确定性销毁,注意,delete 实际上并没
有直接销毁托管对象的内存,它只是调用类型的析构函数对句柄 ^ 执行结束性的清理工作,而垃圾收集器将负责最终销毁和回收托
管对象的内存(非确定性销毁)。在处理表示某种资源(例如文件和网络连接)的对象时销毁顺序显然特别重要,因此,对于表示这种
资源的对象,最好采用手工删除的方法,以便确保内存何时被销毁。
[3] 初始化
将类型的句柄^初始化为“空”,使用nullptr,如:
String ^firstPrompt =nullptr;
C++/CLI 托管C++的数据类型介绍【2】