科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件了解Visual Studio 2005中的C++语言

了解Visual Studio 2005中的C++语言

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文着重叙述了Viusal Studio 2005版本给C++带来的五个方面的变化,供大家参考!

作者:佚名 来源:中国IT实验室 2007年12月11日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

四、指针与句柄

对于扩展的托管C++来说,一个主要的限制是C++语言没有变化,两种不同的事情使用相同的符号。“*”的意思要根据代码的上下文而定,试着看看下行代码:

Foo* pf = new Foo();

Foo对象在那里创建?内存是否会被自动清除?是否可以象下面代码那样对于指针使用如下算法:

pf++;

答案依赖于foo是否使用__gc关键词声明,如果它是一个垃圾收集对象,它只能在托管堆上创建,而不能在本地堆、不能在栈上创建。另一方面,如果没有使用__gc关键词声明,这行代码将在本地堆上给对象分配内存,这时候你必须记住使用“delete”来释放它。

一旦编译器的作者拥有了修改语言的自由,正如C++/CLI已经发生的那样,你大可不必担心类对象来自那里,它在哪里存在。你完全可以通过不同的语法来告之对象它应该存在在哪里。

Foo^ hf = gcnew Foo();

这叫做一个句柄,起初绝大多数C++开发组将^这个符号称为“脱字符号或帽子”,现在都叫做帽子。就象指针那样,你从处理*或->符号中解脱出来。这种变化带来的冲击绝大部分是在你的头脑里,你只要看实例的声明就能判断对象生命期的管理,而不用返回查看类的声明。

说到类的声明,__gc and __nogc已经不再存在,在它们的位置上是一些比较“Cool”的、带有空格的关键词,带空格的关键词虽然看上去是两个词,但实际上是含有空格的一个词。例如:

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

你可能认为“ref”是C++/CLI中的一个新关键词,但实际上它不是,“Ref class”是一个关键词,其他的一些类似关键词是:“value class”,“interface class”和“enum class”。因为以前几乎写的每一个C++程序都含有一个叫“Value”的变量,我非常高兴它没有变成一个关键词。

一个ref class是一个托管类,一个生存在托管堆上并由垃圾收集器管理的类。正如我先前说的,你可以在栈上创建实例,编译器将通过一个隐藏的灵巧的指针来管理该对象。

五、属性

C++的属性变化非常大,因为我在文章的开篇讲述了托管C++中属性的尴尬,现在就让我们以简洁的C++/CLI版本来结束吧!

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;

属性是否是关键词,从某种意义上可以这么说,它是一个定位型的关键词,所以你可以毫无冲突地将一个变量或函数称为属性,就象上面的代码那样,它只是在类的定义中有特殊的含义。现在的C++/CLI语言支持将属性定义为一个单独的单元,相对与以往的方式,我更喜欢这种方式,相信你也是这样。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章