使用一个简单的构造函数

时间:2012-01-05 01:32:48

标签: c++ constructor

  

12.1 / 5如果构造函数是隐式声明的默认构造函数并且如果:

,则构造函数是微不足道的      

- 它的类没有虚函数(10.3),也没有虚拟基础   类(10.1)和
   - 该类的所有直接基类都有   琐碎的建设者,和     - 对于其所有非静态数据成员   类类型(或其数组)的类,每个类都有一个   琐碎的构造函数。

首先,我认为一个简单的构造函数只是一个隐式的默认构造函数。但是当在标准中阅读上面的文本时,看起来简单的构造函数不仅是一个隐式的默认构造函数,而且还有上面提到的其他要求。这是什么意思?有什么重要的建设者?

例如:

class X
{
  // ...
};

类X是否具有普通或隐式默认构造函数?

2 个答案:

答案 0 :(得分:2)

这取决于// ...

中的内容

每个简单的构造函数都是隐式声明的默认构造函数,但并非每个隐式声明的默认构造函数都是一个简单的构造函数。如果具有隐式默认值,则类X具有简单的析构函数,其每个基类具有隐式默认值(以及那些基类的基础 - 类,等等,其每个成员都是int之类的原语,或者是具有隐式默认值的类型(以及其成员的成员,以及等等,以及它的成员的基类,它们的基类等,以及它们的基类的成员,它们的成员,等等,等等。 / p>

以相反的方式查看它可能更容易:如果一个类没有有一个简单的构造函数,那么没有扩展它的类(“is-a”)或包含它( “has-a”)也有一个简单的构造函数。

答案 1 :(得分:1)

琐碎的构造函数什么都不做。帖子中的列表表示构造函数在以下情况下是微不足道的:

  1. 您没有通过提供非默认构造函数
  2. 使您的构造函数工作
  3. 您的类的基础并没有使您的构造函数与准备处理虚拟函数,虚拟基类或自己的非平凡构造函数相关联工作
  4. 您班级的数据成员没有让您的构造函数与调用自己的非平凡构造函数相关联工作
  5. 这些规则合在一起意味着构造函数无关,因此琐事

    如果是X,这一切都取决于它的数据成员:如果它们都有简单的构造函数,如果你自己没有提供一个非平凡的构造函数,X将有一个简单的构造函数太