探究C++对象模型_深圳C++培训机构
- 时间:2017-08-03
- 发布:深圳C++培训班
- 来源:达内新闻
- 分享到:
c语言培训:探究C++对象模型_深圳达内C++培训
深圳达内小编找学C++中一定会在main()函数中小编shou次使用到identity,我就会把identity构造出来,但在在main()函数快要结束的时候,达内培训小编我在把identity摧毁掉。就像identity所谓global object如果有constructor与destructor的话,小编说它需用静态的初始化操作和内存释放来进行操作。
C语言小编咋还学习C++程序中所有的global objects都被放置在程序的data segment中。如果显式指定给它一个值,此object将以该值为初值。否则object配置到的内存内容为0。
当cfront还是唯yi的C++编译器,而且跨平台移植性比效率的考虑更重要的时候,有一个可移植但成本颇高的静态初始化(以及内存释放)方法,达内c语言培训中把它成为munch。
编译器的策略之一就是,无条件地在程序起始(startup)时构造出对象来。然而这会导致所有的local staticclass objects都在程序起始时被初始化,即使它们所在的那个函数从不曾被调用过。因此,只在identity()函数被调用时才把mat_identity构造起来,是比较好的做法(现在的C++ Standard已经强制要求这一点)。那我们应该怎么做呢?
cfront之中的做法是:首先,c语言入门学习中会导入一个临时性对象以保护mat_identity的初始化操作。第yi次处理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培训)