什么是默认构造函数?

转载:https://blog.csdn.net/bear_n/article/details/72798301

对于C++默认构造函数,我曾经有两点误解:

  • 类如果没有定义任何的构造函数,那么编译器(一定会!)将为类定义一个合成的默认构造函数;
  • 合成默认构造函数会初始化类中所有的数据成员;

在看《Effective C++》时,条款05《了解C++默认编写并调用哪些函数》中说到“….惟有当这些函数被需要(被调用),它们才会被编译器创建出来。

“这些函数“指的是编译器版本的拷贝构造函数赋值操作符析构函数,如果类中没有生命任何构造函数,编译器还会为类声明一个default默认构造函数

这些函数都是public且inline的;

也就是说,默认构造函数“被需要”的时候编译器才会帮我们合成,那什么情况才是默认构造函数”被需要“呢?

这个问题《Effective C++》并没有给出答案,直到看了《深度探索C++对象模型》,才明白了编译器何时才会帮我们合成一个默认构造函数。

 

什么是默认构造函数?

 

默认构造函数是可以不用实参进行调用的构造函数,它包括了以下两种情况:

 

  1. 没有带明显形参的构造函数。
  2. 提供了默认实参的构造函数。

 

类设计者可以自己写一个默认构造函数。编译器帮我们写的默认构造函数,称为“合成的默认构造函数”。

 

强调“没有带明显形参”的原因是,编译器总是会为我们的构造函数形参表插入一个隐含的this指针,所以”本质上”是没有不带形参的构造函数的,只有不带明显形参的构造函数,它就是默认构造函数。

 

posted @ 2021-04-22 08:40  唯一诺  阅读(813)  评论(0编辑  收藏  举报