浅谈构造函数

说道构造函数,大家可能都不陌生,但构造函数到底是什么作用呢。这个问题就好像我们大家都会用C++,但没几人敢说自己精通C++一样。我们先来看一看最简单的例子吧。

question

已知类a继承类b且包含类c,求a,b,c的构造顺序。

answer

b > c > a

这个答案大家肯定知道,但为什么呢,对于该问题一般那些资深C++开发者一眼就能看出你是有自己的理解还是书本式的记忆,因此不要试图用书本式的解释。

分析

其实构造函数也没那么神秘,就是用来初始化数据,为对象的创建做准备的。这不废话么。有了这个认识,那为什么上面是bca,而不是其他顺序呢。好像没什么必然的联系。但是,以初始化为主的构造函数,那没有数据的话怎么初始化数据呢。因此,a包含c,那么c就是a数据的一部分,没有c的话a就无法初始化。因此c > a。a继承于b,子类和父类的关系根据名称也知道,子类继承了父类的数据,父类也是子类的一部分,因此b > a。abc这三者的关系就好似儿子、父亲和儿子的细胞。没有父亲,就没有儿子的全部,自然也没有儿子的细胞。所以答案自然而然。

初始化顺序

直接初始化>初始化列表>构造函数

RAII

在C++11特性中,出现了RAII的思想,就是构造中分配内存,析构中释放内存。这也是智能指针保证安全性的原因。


纸短情长啊文章结束了但我们的故事还在继续
坚持原创技术分享,您的支持将鼓励我继续创作!