(2)“带有Default Constructor”的Base Class
如果一个没有任何constructors的class派生自一个“带有default constructor”的base class,那么这个derived class的default constructor会被视为nontrivial,并因此需要被合成出来。
需要注意的是,编译器会将这些base class constructor安插在member object之前。
(3)“带有一个Virtual Function”的Class
另有两种情况,也需要合成出default constructor:
(a)class声明(或继承)一个virtual function
(b)class派生自一个继承串链,其中有一个或更多的virtual base classes
以下面这个程序片段为例:
class Widge {
public:
virtual void flip() = 0;
// ...
};
void flip(const Widge& widge) { widge.flip(); }
// 假设Bell和Whistle都派生自Widge
void foo()
{
Bell b;
Whistle w;
flip(b);
flip(w);
}
下面两个扩张操作会在编译期间发生:
1.一个virtual function table会被编译器产生出来,内放class的virtual functions地址;
2.在每一个class object中,一个额外的pointer member(也就是vptr)会被编译器合成出来,内含相关的class vtbl的地址。
此外,widge.flip()的虚拟引发操作(virtual invocation)会被重新改写,以使用widge的vptr和vtbl中的flip()条目。
// widge.flip()的虚拟引发操作的转变
(*widge.vptr[1])(&widge)
为了让这个机制发挥功效,编译器必须为每一个Widge(或其派生类)之object的vptr设置初值,放置适当的virtual table地址。
相关推荐
深度探索C++对象模型读书笔记
深度探索C++对象模型的阅读笔记,可以看看别人是怎么学习C++的
深度探索c++对象模型(2012版本)
深度探索C++对象模型 C++程序员必看编程书籍
深度探索C++对象模型
深度探索C++对象模型_中英 深度探索C++对象模型_中英 深度探索C++对象模型_中英
深度探索C++对象模型 PDF中文清晰版.zip深度探索C++对象模型 PDF中文清晰版.zip深度探索C++对象模型 PDF中文清晰版.zip深度探索C++对象模型 PDF中文清晰版.zip深度探索C++对象模型 PDF中文清晰版.zip深度探索C++对象...
书中涵盖了C++对象模型的语意暗示,并指出这个模型是如何影响你的程序的。 对于C++底层机制感兴趣的读者,这必然是一本让你大呼过瘾的绝妙好书。如果你是一位C++程序员,渴望对于底层知识获得一个完整的了解,那么...
《深度探索C++对象模型》专注于C++面向对象程序设计的底层机制,包括结构式语意、临时性对象的生成、封装、继承,以及虚拟——虚拟函数和虚拟继承。这本书让你知道:一旦你能够了解底层实现模型,你的程序代码将获得...
深度探索C++对象模型 深度探索C++对象模型
深度探索C++对象模型 超高清
深度探索C++对象模型 中文图片影印版pdf,比较清晰,不是那种模糊的版本,和文字版差别不大 英文清晰文字版chm 第一代C++编译器开发主管所写。如果你想成为真正的C++高手,看这本书,他为你讲述了编译器在处理各种...
深度探索C++对象模型(笔记)
inside c++ object Model && JJ.Hou中译本 《深度探索C++对象模型》
深度探索C++对象模型.pdf,本书系统有深度的阐述C++面向对象,解释其本质!
深度探索C++对象模型(侯捷 著).pdf 清晰版
深度探索C++对象模型(清晰版).pdf