工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 微软开发专栏 > Visual Studio.net专栏 > VC.net > 正文
体验Visual Studio 2005中C++语言
[文章信息]
作者:刘涛
时间:2005-03-10
出处:天极网
责任编辑:方舟
[文章导读]
Viusal Studio2005极大地丰富了它的库,可以说是科研背后的清障机和加速器
advertisement
热点推荐
· 在VC程序中实现控件的动态生成与响应
· 抢先感受金山毒霸2005强大功能
· 网易POPO最新版昨晚发布
· 十年MFC经历认识的Microsoft技术
· 轻松合并不同格式的视频文件
[正文]

1 2  下一页

  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++的力量来管理对象的生命期,而不是仅仅在堆上分配它并等待垃圾处理器来处理。


1 2  下一页

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • 超越C++:下一代C++——C++/CLI简介
  • Visual C++ 2005中混合代码的初始化
  • 体验Visual C++.NET 2005中的STL
  • 托管C++应用程序开发之概述
  • 用VC.NET制作启动屏幕的新方法
  • 军队信息化诞生新领域 电子军务呼之欲出
  • 世界经济论坛公布信息化程度全球最新排名
  • 2004政务绩效评估:政府门户尚处于发展阶段
  • 甲骨文出资5.15亿美元 意图收购RetekInc
  • 技术并购:帮你突破传统增长的“天花板”
  • 微软推跨电话和PC网络新软件 意在企业客户
  • 掌门人远避天涯 和光商务引爆深圳担保圈
  • 北京移动承诺话费误差双倍返还 四月底实施
  • Advertisement

    天极无线


    奇妙科幻|美好风光|清风车影|漫画卡通|星座生肖|明星写真|动物世界
    老鼠爱大米
    挥着翅膀的女孩
    女人味
    栀子花开
    白月光
    刚刚好
    江南
    快乐崇拜
    亲爱的你怎么不在我身边
    小薇
    2002年的第一场雪
    有多少爱可以重来
    我的地盘
    七里香
    情人
     
    老鼠爱大米 老板电话
    冲动的惩罚 七里香
    我不是黄蓉 女生撒娇
    盛夏的果实 坚持到底
    孤单北半球 眉飞色舞
    挪威的森林 可爱女人
    最浪漫的事 老板电话

    CSEEK搜索