通用类型系统中的指针
更新:2007 年 11 月
指针是特殊类型的变量。运行库支持三种指针:托管指针、非托管指针和非托管函数指针。
托管指针,也就是托管堆上的对象的句柄,是可用于托管应用程序的新型指针。托管指针指向公共语言运行库堆的托管内存块。自动垃圾回收即是在该堆上执行的。托管指针是为通过引用传递的方法参数而产生的。某些语言提供了产生托管指针的其他方式。只有托管指针才符合 CLS。
说明: |
---|
Visual C++ 2002 和 Visual C++ 2003 中用 __gc * 来声明托管指针。在 Visual C++ 2005 中则被替换为 ^,例如 ArrayList^ al = gcnew ArrayList();。 |
非托管指针是指向标准 C++ 堆的托管内存块的传统 C++ 指针。由于非托管指针不是公共语言规范 (CLS) 的一部分,您的语言可能不提供定义或访问这些类型的语法。有关非托管指针的支持信息,请参见关于您的语言的文档。
非托管函数指针也是传统 C++ 指针,指向函数的地址。CLS 提供了委托作为非托管函数指针的托管替代内容。
不需要显式定义指针类型。在声明指针时,就确定了指针类型所需的所有信息。
当指针类型为引用类型时,指针类型的值不是对象,而且无法从这样的值确定准确的类型。
通用类型系统对指针类型提供了两种对于类型安全的操作:从指针引用的位置加载值以及向该位置写入值。这些对于类型安全的操作是符合 CLS 的。
通用类型系统还对指针类型提供了三种基于字节的地址算法操作:向指针加上整数,从指针减去整数,以及从一个指针减去另一个指针。前两种算法操作的结果将返回一个与原指针同样类型的值。这些基于字节的操作是不符合 CLS 的。