![](https://img-blog.csdnimg.cn/20190601132954876.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
深入理解C++对象模型
耐心沉潜
天健园扛把子
兴趣遍地都是,专注和持之以恒才是真正稀缺的。
展开
-
类的几点设计原则
1.即使是一个抽象基类,如果它有非静态数据成员,也应该给它提供一个带参数的构造函数,来初始化它的数据成员。或许你可以通过其派生类来初始化它的数据成员(假如nostatic data member为publish或protected),但这样做的后果则是破坏了数据的封装性,使类的维护和修改更加困难。由此引申,类的data member应当被初始化,且只在其构造函数或其member function中...原创 2019-07-05 17:35:07 · 219 阅读 · 0 评论 -
成员初始化列表
什么时候使用初始化列表在构造函数中对于对象成员的初始化发生在初始化队列中——或者我们可以把初始化队列直接看做是对成员的定义,而构造函数体中进行的则是赋值操作。所以不难理解有四种情况必须用到初始化列表:当初始化一个引用成员的时候当初始化一个const成员的时候成员对象没有默认构造函数基类对象没有默认构造函数前两者因为要求定义时初始化,所以必须明确的在初始化队列中给它们提供初值。后两者...原创 2019-07-03 21:07:00 · 289 阅读 · 0 评论 -
拷贝构造函数
我们通常认为当一个类为没有定义拷贝构造函数的时候,编译器会为其合成一个,答案是错误的。编译器只有在必要的时候在合成拷贝构造函数。那么编译器什么时候合成,什么时候不合成,合成的拷贝构造函数在不同情况下分别如何工作呢,这是本文的重点。什么时候调用拷贝构造函数显式地将一个类的对象作为另一个对象的初值将实参对象传递给实参对象的时候函数返回一个对象的时候其中后面两个会生成临时对象。编译器何时...原创 2019-07-03 09:04:33 · 160 阅读 · 0 评论 -
深入理解构造函数
我们通常认为:没有定义默认构造函数的类都会被编译器生成一个默认构造函数。编译器生成的默认构造函数会明确初始化类中每一个数据成员。但其实并不是这样。C++ Annoted Reference Manual告诉我们default constructor…在需要的时候被编译器产生出来,那么问题来了,什么时候是需要的时候?C++标准规定:如果类的设计者并未为类定义任何构造函数,那么会有一个默...原创 2019-07-02 20:36:23 · 145 阅读 · 0 评论