第五章 构造、析构、拷贝语意学

纯虚函数的存在:

  它只能被静态调用,不能经由虚拟机制调用。

  惟一的例外是纯虚函数的析构函数:每一个继承的析构函数被编译器扩展,以静态方式调用其每一个virtual base class以及上一层的base class的析构函数。只要缺乏任何一个的定义就会导致链接失败。

准则:接口不const ,析构函数不是纯析构

关于构造函数里面的内容:

 初始化列表,虚函数表的指针,继承来的所有构造函数。

1.在derived class constructor中,所有的virtual base class以及上一层的base classConstruct会被调用。

2.上诉完成后,对象的vptr被初始化,指向相关的table

3.如果有Members initialization的话,将在Construct体内扩展开来,这必须在vptr设定之后才做,以免有一个virtual member function被调用。

4.最后,执行所提供的代码。

  如果调用操作限制必须在Constructdestructor中直接调用,那么必须将调用以静态方式决议,千万不要用到虚拟机制。在哪一个类中构造就调用哪一个,嵌入调用同样。

拷贝:如果想拒绝,则声明为私有。(除了在成员函数中或者友员函数)

建议:不要允许一个virtual base class的拷贝操作或者有任何数据。

析构函数:

  如果class没有定义析构函数,那么只有在Class内含的Members Object或者基类拥有析构函数的情况下,编译器才会合成一个出来。

执行顺序:

  析构的函数本体先被执行,以构造调用相反的顺序。

  析构然后重新设定虚表。指向适当的base class的虚表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值