《深度探索c++对象模型》学习笔记 - 6 执行期语义学

 

1.         如果一个block {} 或函数中有一个以上的return,或者goto,那么每个离开点都会被放置析构函数。所以,提倡下面的内容是正确的:1)一个函数尽量只有一个出口点return2)尽量推迟变量定义,以避免不必要的构造和析构。

2.         全局对象会被初始化并设初值,局部对象不会。即使对于没有默认构造函数的全局对象,其x.n也会被初始化=0.

3.         全局对象的缺点:1)构造过程不能被try…catch控制;2)跨模块的全局静态变量的初始化顺序没有保证。

4.         Local static对象:即使被调用多次,其构造函数会在第一次执行时执行且只被执行一次。析构也只有一次。

5.         如果对象没有默认构造函数或者没有不需要提供参数就可以执行的构造函数,那么定义其数组将会编译失败。

6.         New A[x]必须用delete []pVC中可以使用delete[x]p,但是[]中的x会被忽略。

7.         基类指针指向子类对象构成的数组会很有麻烦,因为一般说来sizeof(子类对象) > sizeof(基类对象),而数组析构的时候,只有基类析构函数被调用,子类析构不会被调用,所以如果子类有特殊资源需要释放的话,肯定不能给释放掉。

8.         对于base* p = new der[10],语义上的含义:p指向含有10base的对象,其size10*sizeof(base)=40。但是实际上,却出现了size10*sizeof(der)=80的数组,所以语义上有冲突。释放行为由编译器而定:可能不会释放完整。

9.         Placement new一般特指含有一个void*参数的new版本:1)将对象放到void*地址上;2)调用构造函数。

10.     如果有表达式产生了临时对象,那么应该对完整表达式求值结束之后才摧毁这些创建的临时对象。有两个例外:1)该临时对象被refer为另外一个对象的引用;2)该对象作为另一对象的一部分被使用,而另一对象还没有被释放。

 

 

实验代码:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值