什么是默认构造函数?

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

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

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

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

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

这些函数都是public且inline的;

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

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

什么是默认构造函数?

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

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

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

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

原文链接: https://www.cnblogs.com/weiyouqing/p/14687801.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/209786

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 上午12:02
下一篇 2023年2月13日 上午12:03

相关推荐