动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
   .Net → 阅读文章

 体验Visual Studio 2005中C++语言

作者来源: 
阅读 数 183 人次 , 2006-4-25 14:59:00 


  Viusal Studio2005极大地丰富了它的库,可以说是科研背后的清障机和加速器,对于这一点,我想大部分人都是这么认为的。它带来的大量工具及新增的功能性函数使开发人员的生活越来越快乐、简单。 但对于我来说,所有这些与Visual Studio2005在C++上做的改变相比却都显得是那么苍白无力。这篇文章中,我着重叙述即将向用户发行的Viusal Studio2005版本给C++带来的变化。

  一、对下划线说再见

  Visual Studio.NET 2002在C++中引入了可扩展的托管,这种扩展带来的关键词以双下划线开始,例如__gc 和 __property。这个版本发行后的这些年来,我写了大量带有双下划线的代码,我不得不承认我从来都不喜欢这一点,我完全明白真正的原因是什么:双下划线将关键词标志为特殊地扩展,以区分编译器的标准编译规则,在理论上,可以充分使用可扩展的托管,使用其他的编译器编译它,这将忽略所有带双下划线关键词。

  解决方案:微软发现了一个解决方法来改变这种语言而不是替换这种语言。但是这种妥协带来了以下结果:

  1、开发者发现这种语法不自然而且看上去也很不舒服。

  2、不能尽其所能。

  例如,下面是托管C++声明属性的例子:

public __gc class Foo
{
// hundreds of lines of code
__property String* get_Text();
// hundreds of lines of code
__property void set_Text(String*);
// hundreds of lines of code
};

  我相信,有良好编程习惯的程序员会将get与set紧挨者使用,并且会紧接着又声明所有下面需要使用的变量。但是语言并不管这些,它不能提供封闭的括号来界定结构,来让你声明"这是一个作为单元的属性"。所以当它运行时显得不自然并且与其他.NET语言也格格不入。
面对这些你能做什么?唯一的方法是将C++与CLI自然地结合起来,反之也就是真正改变C++。如果你将这么作,一种自然完美的语言将给你带来巨大的自由,当你编程时就再也不会需要双下划线了。

  二、生命期与作用域

  我非常喜欢明确地销毁对象。实际上,我也很喜欢垃圾收集器。可能我要说的更多,事实上,虽然它们有着各地的位置,而且对于我来说都需要,但如果我正在创建的对象仅仅操作内存,如果使用后不需要我释放内容我将会非常高兴。但内存管理是如此的虚弱无力,当我的对象占用非托管的资源时,例如一个数据库连接,一个文件对象或类似的对象,我需要自己控制。我需要确认一旦不需要的时候它就消亡。Dispose模式试图处理这些情况,但它并不是自觉的行为。封闭的括号也许是一种很好地解决途径。

  在普通的非托管C++中,以下的代码说明了你不得不做的工作:

//this is a code fragment
{
 try
 {
  Foo* f=new Foo(/* params */);
  //all kinds of code, some of which might throw exceptions
  delete f;
 }
 catch (/* something */)
 {
  delete f;
  //whatever else, or rethrow;
 }
}

  如果在堆上创建对象显的是那么的容易:

//this is a code fragment
{
Foo f;
//all kinds of code, some of which might throw exceptions
}

  当变量f超出作用域,无论是否是因为异常,它都自动消亡,这非常自然而且令人高兴、满意。

  当这个对象在托管堆上,你不需要删除它,它将被垃圾搜集器清除。但是,如果它占用了一个托管资源,你可能想通过Dispose()方法来清除它,C#为这么做提供了using构造,但是它仍然不象我们的堆例子那样简单。

  在新版本的语言中(以前叫C++/CLI),你可以不依赖于对象的种类来创建它,你可以在堆上创建一个托管对象,并且它可以在超出作用域后明确地被销毁。如果愿意的话,你还可以在托管堆上创建,这完全根据你的选择而定。

  这种变化带来了其他的后果。最具深远意义的结果是你可以轻松地将任意对象放入模板集或作为另外一个类的成员变量。你可以充分发挥C++的力量来管理对象的生命期,而不是仅仅在堆上分配它并等待垃圾处理器来处理。
  
 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:探索C++的秘密之详解extern
· 下一篇:VC++.NET下GDI+编程之GDI+简介
· SQL命令中DateTime格式参考
· 开心就贴(四)
· 解析Visual Basic.NET事件编程
· 全面剖析VB.NET(1)
· Render方法生成静态页


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077