您的位置:首页 > 其它

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

2014-12-20 16:21 162 查看
纯虚函数的存在:

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

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

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

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

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

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

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

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

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

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

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

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

析构函数:

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

执行顺序:

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

析构然后重新设定虚表。指向适当的base class的虚表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐