1.什么是cpp对象模型
cpp对象模型是指编译器实际上是怎么实现的c++的对象,比如构造函数、析构函数、虚函数、继承关系。
2.构造函数
在学cpp的时候一般会有这样的知识被告知,当我们没有主动写任何类的构造函数的时候,编译器会为我们合成一个默认的构造函数,这句话的问题是有时候构造函数不需要采取任何行为,编译器就不会为我们合成,哪怕我们认为是合成了。
体现就是如果去检查汇编文件是没有构造函数的。
编译器会为我们合成默认构造函数的情况:
1.类内的成员所属的类有缺省的构造函数
编译器会在我们没有构造函数,且被构造的情况下生成一个默认构造函数去调用成员的缺省构造函数
2.父类有缺省的构造函数
编译器会为我们生成缺省构造函数调用父类的构造函数
3.拥有任何虚函数
编译器会为我们在构造函数内初始化vptr和虚函数表,这是虚函数的实现机制
4.拥有虚基类
编译器会为我们在构造函数内初始化虚基类表
3.拷贝构造函数
编译器会为我们合成拷贝构造函数的情况,首先得是我们没有手动写拷贝构造函数,并且产生了拷贝调用的应用场景。
四种情况也是
1.成员有拷贝构造函数
2.父类有拷贝构造函数
3.虚函数
4.虚基类
4.编译器对函数的优化
当函数内部的局部变量作为返回值的时候,如果先声明tmp再返回,这时候可能有一个拷贝构造的过程,但是如果直接在返回的时候构造,编译器的优化开启的状态会直接在之前拷贝的位置构造,减少了一次构造函数的调用操作。
5.总结
阅读深度探索c++对象模型的时候还是比较枯燥的不过收获很多,比如vptr的部分。