C :使用 Visual C 2005 的现代语言特色编写更快的代码(3)
添加时间:2007-09-01 原文发表:2007-08-31 人气:94 来源:vckbase.com
本文章共13664字,分9页,当前第3页,快速翻页:
| | Figure 3 中的第二个代码例子表示了C#新代码的样子。其实这种方法也未尝不可,而且也还算有一定的可读性。但当你开始加入更多需要清理的代码对象时,你的代码就会变得越来越难懂,而且,任何你忘记清除的对象都会在最后垃圾收集程序运行的时候给收尾模块(finalizer)线程增加负担。在此之前,你也许已对一些有宝贵的资源上了锁。这点在 Visual
Basic .NET 的代码实现中显得尤为不堪(尽管 Visual Basic 2005 新增加了与 C# 相类似的 Using 语句) Visual C 2005 现在提供给任何类型以析构函数和/或收尾模块,无论它是托管的还是本机的。在此类型为托管的情况下,编译器会将析构函数映射到IDisposable::Dispose方法。这意味着你能够用C 语言编写同样的方法。如 Figure 3 第四个代码段所示,在此中读取程序的析构函数/Dispose 方法将会自动被调用,就像你在C#中使用“Using”语句一样。当某一类型在栈上创建时,它的析构函数会在它超出其使用范围时被调用。
托管扩展的一个最大的问题是对指针的使用。指针们被用于各种各样的任务,而其情况也是复杂多变,像这样的指针行为很难被理解。在某一特定的代码段中要解读自己在和哪一种指针打交道需要一定程度上的天赋。这种复杂
性在下一个版本中会被去掉。在 Visual
C 2005 中,指针还是原原本本的指针。它们指向稳定的对象,而你则可以用指针进行算术操作。指向对象的指针的生存期限必须由开发人员来显性指出并管理。当使用指针时,运行库不会负责对指针带来的垃圾进行清理。
现在让我们看一下 Visual C 2005 的设计师们是如何解决这一问题的。与 Visual Studio .NET 2003 和 Visual
Studio 2005 中使用 new 操作符返回指针的方式不同,“gcnew”操作符返回一个“句柄”——一个新型结构,在语法中用“^”符号来表示。该句柄引用托管堆中的整个对象。就是说,
它们不能用来指向类型的内部,而编译器有着一系列的对句柄的限制来确保其行为,而这也可以帮助开发人员正确并安全地使用句柄。句柄不允许算术运算,也不可以被映射为空指针或是任何完整的类型。然而,星号和箭头操作符仍被用来引用
其对象。
这并不意味着你不能获得一个指向垃圾收集程序堆上的指针。和在C#中使用“&”操作符与一个固定的关键字联合体相类似,在 Visual C 2005 中,pin_ptr 抽象类型允许你
获得一个在托管堆上对象的固定指针。只要这个指针存在,在托管堆中的对象就会被固定住,这可以防止垃圾收集程序在收集过程中移动它。Visual
C 2005 还加入了追踪引用操作符,用百分号(%)来注释。当开发人员了解了本机的“&”引用操作符时,大多数人都知道它是一个指向对象的指针,在使用时是由编译器来自动清除的。在大多数情况下,% 对^而言就像&对*一样。
在托管的环境下,将本机引用指向托管对象就像将本机指针指向托管对象一样危险。在指针与引用幕后的基本道理就是:被引用的对象并不会被四处移动。追踪引用和本机引用很相似,除了一点,就是追踪引用引用托管堆上的对象,并且对其进行“追踪”,即便是它们被垃圾收集程序移走。百分号操作符也用来取托管对象的“地址”,所以就像&操作符应用在本机类型返回对那个对象的指针一样,%操作符应用在托管引用类型时会返回一个那个对象的句柄。
从总体上来说,当 C 开发人员知道标准在控制他们的编程语言时,他们都会感到心安理得。为此,由第三方推广对此标准的采用,并保证语言本身的稳定性得到进步,这个新的语法规则采集众长而成为一个名为 C /CLI 的
提议标准。在 2003年10月,ECMA 通过投票组织了一个特殊的任务团体,名为 TG5,其目的是为了分析和采用这一标准,就像 WG21 作为 ISO
C 的管理团体一样。实际上,在 WG21 中的关键性人物也在 TG5 中工作。他们的计划是在 2004 年年底将其(译者注:C /CLI)标准化。 本文章更多内容:<<上一页 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 下一页>> |
 本文章所属分类: 首页
→ VC++
|
文章搜索
热门文章
推荐文章
最新文章
|