C++对象模型       

C++对象模型

C++对象模型

1非静态数据与指向存放虚函数地址的虚函数表的指针放在类的object内,其他静态数据、静态函数、非静态函数独立在object之外,包括虚函数表。
2继承基类的子类对象包含基类信息与自己的信息。
3虚继承的子类对象,

构造函数

缺省构造函数

没用的(trivial)缺省构造函数

对于一个类,没用用户声明的构造函数,编译器不会合成缺省构造函数,只合成以下四种有用的构造函数。没有的函数当然不需要合成,很合理。

有用的缺省构造函数
一个类包含具有有构造函数的成员类
Class A
{
public:
	B b;
	int i;
}
Class B
{
public:
	B();
} 编译器会在A的构造函数里显式的调用B的构造函数   

Class A
{
public:
	inline A()
	{
		B::B();
	}
	B b;
	int i;
} 如果程序员已经定义了A的构造函数,则编译器也会在构造函数开头插入调用B的构造函数的代码。   

Class A
{
public:
	A()
	{
		**B::B();**
		i = 0;
	}
	B b;
}
继承带有缺省构造函数的基类

编译器会合成构造函数来调用基类的构造函数,如果有多个基类,则根据声明顺序调用之。

带有虚函数的类

编译器安插构造函数初始化虚函数表指针

虚继承的类

同上类似,编译器需要初始化一些关于操作虚基类的代码。以后介绍。