快速业务通道

Visual Studio 2005中C++的变化

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
到完整的C++生存时间周期,而不是仅仅是把它分配到相应的堆,然后等碎片收集来处理它。

  解析和定稿

  当你为其它语言写了碎片收集对象是,你是否为它写了解析函数?当你使用C++,你可以在堆栈构造对象,解析函数将运行当它越界时,什么事情会发生当其他C#或VB程序调用这个对象,运行时仅从简单的方式去处理,它是用dispose()来解析,任何一个C++/CLI对象都有一个可以任意调用的解析函数。

  假如你在C#或VB中有dispose()的类,你可能已经写了一个定论,C++/CLI也有简便的语法为定论,就象Foo的解析是~Foo,Foo的定论是!Foo(~是比特的not,!是逻辑的not,它们都是提醒是和构造函数对立的),

  Finalizer将运行当在管理堆中建立而不被调用,确信它所包含的非管理源文件被清除,即使其他调用函数忘了去解析。

  指针和句柄

  在C++扩展名管理中,C++的主要限制没有变化,同样的符号和语法用做完全的事情,*的含义依赖于你的代码中的其他位置的信息,你可以试试下面的代码: Foo* pf = new Foo();
  Foo对象将在哪里建立?那块内存是否被清除?我能象下面那样对指针做算法吗:

  pf++;

  答案依赖于Foo是否用__gc关键字声明,假如它是碎片收集对象,它只能在管理堆不是在本堆和堆栈中建立,另一方面,如果没有用__gc声明,将在本堆中分配内存给它,你必须记得去清除它。

  如果编译器有自由去改变语言,就象在C++/CLI上发生的,可以忽视什么地方生存的什么类型的类,可以用不同的语法表明它在哪里生存:

Foo^ hf = gcnew Foo();
  这被叫做句柄,许多C++团队好象都是用^符号来标明的,你可以用*和->来解除句柄的引用,你可以从实例的声明而不是回过头从类的声明中得到生命期的声明。例如:

程序代码:

ref class R
{
  private:
   int m_a;
  public:
   R(int a): m_a(a) {}
}; 

你可能会认为ref是C++/CLI新的关键字,但它不是,“ref class“是关键字,你可以有变量是ref而不会引起混乱,其他的关键字还有”value class“,”interface class“,”enum class“,几乎过去所有的C++程序都会有value这个变量,我很高兴value没有变成关键字。

  Ref class 是一个管理类,一个被设计成生存管理队中和被碎片收集管理的类,象我前面所示的你可以在堆栈中声明一个实例,编译器会帮你找到它,加上不可见的智能指针。

  特性

  有很多C++特性的改变,因为我是用C++比较笨拙的特性开始的例子,所以我现在关闭比较相近的C++

程序代码:
ref class R
{
  private:
   int m_Size;
  public:
   property int Size
   {
    int get() { return m_Size; }
   void set(int val){m_Size = val;}
  }
};
R r;
r.Size = 42;

property是一个关键字吗?有点象,它是一个位置关键字,所以你可以有property的变量和函数,而不会引起混乱,它只会在类定义中有特殊的含义,现在在C++/CLI中有单独的单元提供特性定义,我很喜欢这样,相信你也是。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号