深圳.net培训
达内深圳罗湖中心

186-8884-0703

热门课程

探究C++对象模型_深圳C++培训机构

  • 时间:2017-08-03
  • 发布:深圳C++培训班
  • 来源:达内新闻

c语言培训:探究C++对象模型_深圳达内C++培训

深圳达内小编找学C++中一定会在main()函数中小编首次使用到identity,我就会把identity构造出来,但在在main()函数快要结束的时候,达内培训小编我在把identity摧毁掉。就像identity所谓global object如果有constructor与destructor的话,小编说它需用静态的初始化操作和内存释放来进行操作。

C语言小编咋还学习C++程序中所有的global objects都被放置在程序的data segment中。如果显式指定给它一个值,此object将以该值为初值。否则object配置到的内存内容为0。

当cfront还是唯一的C++编译器,而且跨平台移植性比效率的考虑更重要的时候,有一个可移植但成本颇高的静态初始化(以及内存释放)方法,达内c语言培训中把它成为munch。

编译器的策略之一就是,无条件地在程序起始(startup)时构造出对象来。然而这会导致所有的local staticclass objects都在程序起始时被初始化,即使它们所在的那个函数从不曾被调用过。因此,只在identity()函数被调用时才把mat_identity构造起来,是比较好的做法(现在的C++ Standard已经强制要求这一点)。那我们应该怎么做呢?

cfront之中的做法是:首先,c语言入门学习中会导入一个临时性对象以保护mat_identity的初始化操作。第一次处理identity时,这个临时性对象被评估为false,于是constructor会被调用,然后临时性对象被改写为true。这样就解决了构造的问题。而在相反的一端,destructor也需要有条件施行于mat_identity是否被构造起来,很简单,如果那个临时性对象为true,就表示构造好了。困难的是,由于cfront产生C码,mat_identity对函数而言仍然是local,因此我没办法在静态的内存释放函数(staticdeallocation function)中存取它。解决办法是:取出local object的地址。

v1和v2都被配置于程序的data segment,v1值为1024,v2值为0(这和C略有不同,C并不设定初值)。在C语言中一个global object只能够被一个常量表达式(可在编译期求其值的那种)设定初值。当然,constructor并不是常量表达式。虽然class object在编译时期可以被放置于data segment中并且内容为0,但constructor一直要到程序启动(startup)时才会实施。必须对一个“放置于program data segment中的object的初始化表达式”做评估(evaluate),这正是为什么一个object需要静态初始化的原因。


达内深圳校区温馨提示:如果你在阅读文章时碰到什么不清楚或不明白的地方,可以进行在线咨询;如果你需要报名,也可以通过在线预约,我们将免费为你安排,或者关注深圳达内微信公众平台:tarenasz(更多内容请点击:深圳.net培训



深圳达内
上一篇:C语言的口令文件_深圳C++培训机构
下一篇:没有下一篇了

C语言的口令文件_深圳C++培训机构

C语言④函数指针的用法_深圳C++培训机构

C语言开发坦克大战游戏_深圳C++培训机构

.net MVC中使用forms验证详解_深圳.net培训机构

选择城市和中心
贵州省

广西省

海南省

台湾