第五章 构造、析构、拷贝语意学
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的虚表。
它只能被静态调用,不能经由虚拟机制调用。
惟一的例外是纯虚函数的析构函数:每一个继承的析构函数被编译器扩展,以静态方式调用其每一个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的虚表。
相关文章推荐
- 深度探索C++对象模型 第五章 构造、析构、拷贝语意学
- 深度探索C++对象模型复习和学习 第五章:构造、析构、拷贝、语意学
- 第五章、构造、析构、拷贝语意学
- C++对象模型 第五章 构造、析构、拷贝语意学
- 【C++】深度探索C++对象模型之构造、析构、拷贝语意学
- 《深度探索C++对象模型》读书笔记第五章:构造、解构、拷贝语意学
- Inside the C++ Object Model 学习笔记 第五章构造 解构 拷贝语意学
- 深入探索C++对象模型之五 --- 析构、构造、拷贝语意学
- 深度探索C++对象模型(五)构造、析构、拷贝语意学
- 【深度探索C++对象模型读书笔记】【第5章】构造、析构、拷贝语意学
- 【深度探索C++对象模型读书笔记】【第5章】构造、析构、拷贝语意学
- 《深度探索C++对象模型》读书笔记之构造、析构、拷贝语意学
- 构造、析构、拷贝语意学
- [读书笔记] 深入探索C++对象模型-第五章-构造、析构、拷贝语义学(中)
- 深度探索C++对象模型:5.构造、析构、拷贝语意学
- C++对象模型——构造,解构,拷贝语意学(第五章)
- 【C++对象模型】第五章 构造、解构、拷贝 语意学
- Inside The C++ Object Model(五)构造、拷贝、析构语意学
- [读书笔记] 深入探索C++对象模型-第五章-构造、析构、拷贝语义学(上)
- [读书笔记] 深入探索C++对象模型-第五章-构造、析构、拷贝语义学(下)