构造函数
上面的话摘自《深度探索C++对象模型》P40,由于其省略了其中c++标准的部分内容,因此很容易造成误解: 编译器隐式生成的构造函数都是 trivial constructor ….. 事实上,描述中提到 default constructor 被隐式声明出来(满足语法需要),而该构造函数是否被编译器合成(实现或定义),取决于编译器是否需要在构造函数中做些额外工作,一个没有被合成的 default constructor 被视为 trivial constructor(这也是c++标准原话的意思),而当编译器在需要时合成了构造函数,那么该类构造函数将被视为 nontrivial。 另外,一个定义了 user-decalred constructor(用户定义的任何构造函数) 的类被视为具有 nontrivial constructor。 下面将着重讨论编译器隐式声明的构造函数在哪种情况下需要被合成(nontrivial),哪种情况下无需被合成(trivial):
已重载构造函数,且重载的构造函数形参列表参数无初始化值,想要使用默认构造函数,必须显式写出默认构造函数 错误示例: 正确示例: 已重载构造函数,且重载的构造函数形参列表参数无初始化值。实例化对象时,对象不跟括号,则使用默认构造函数;对象跟括号且形参赋值,则使用重载构造函数 实例化对象1: 实例化对象2: 已重载构造函数,且重载的构造函数形参列表参数有初始化值。实例化对象时,只能使用重载构造函数 错误示例: 正确示例: 已重载构造函数,且重载的构造函数形参列表部分参数有初始化值,则最后一个形参必须. 一:默认构造函数(default constructor)的定义 就是在没有显式提供初始化式时调用的构造函数
[TOC] 通过声明与类具有相同名称的函数以及可选的附加标识符来创建Dart构造函数。后者称为命名构造函数。 ## 优先定义构造函数而不是静态方法来创建实例
