![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
深入探索C++对象模型
深入研究C++编译器在背后所做的事情,深入探索C++对象模型的知识。
repinkply
工程师一名,热爱技术
展开
-
深入分析虚函数表
相关虚函数表的问题分析:(1)一个类只有包含虚函数才会存在虚函数表,同属于一个类的对象共享虚函数表,但是有各自的vptr(虚函数表指针),当然所指向的虚函数表是同一个。(2)父类中有虚函数就等于子类中有虚函数。只要父类中有虚函数,子类中即便不写virtual,也依旧是虚函数。(3)不管是父类还是子类,都会只有一个虚函数表。不能认为子类继承父类,就认为子类的虚函数表就是,父类的虚函数表+...原创 2020-03-23 20:41:45 · 1419 阅读 · 0 评论 -
对象成员变量初始化列表探索
问题1:何时必须使用成员初始化列表?有以下几种情况1.如果这个成员是个引用。2.如果这个成员是个const类型成员。3.如果这个类是继承一个基类,并且基类中有构造函数,这个构造函数里边还有参数。4.如果成员变量类型是个某个类类型,而这个类的构造函数带参数。...原创 2020-03-23 10:41:09 · 186 阅读 · 0 评论 -
深入探索拷贝构造函数
传统大家认为,如果我们在类中没有定义一个自己的拷贝构造函数,编译器会帮助我们合成一个拷贝构造函数,这个合成的拷贝构造函数也是在必要的时候才合成,那么这个必要的时候是什么时候呢?让我们来一起研究。先来看一个简单的例子:#include <iostream>using namespace std;class A{public: int m_test;};int...原创 2020-03-22 16:34:43 · 175 阅读 · 0 评论 -
深入探索默认构造函数
问题:传统认识为:如果我们自己在类中没有定义任何构造函数,那么编译器就会为我们隐式自动生成一个默认的构造函数,我们称这种构造函数为“合成的默认构造函数”。事实的真相果真如此吗?结论:“合成默认构造函数”,只有在必要的时候,编译器才会为我们自动合成出来,而不是必然为我们合成出来。那到底什么时候是必要的呢?代码演示:#include <iostream>using nam...原创 2020-03-22 12:54:28 · 136 阅读 · 0 评论