带有空体的C ++私有默认构造函数

时间:2015-02-13 11:45:57

标签: c++ default-constructor

我看到了一些代码here

有一个类具有私有默认构造函数,其中包含空主体和参数化构造函数。 代码注释表示默认构造函数是私有的“因此可以创建没有指定属性的对象”[属性由类数据成员表示]。因此,没有必要明确定义私有默认构造函数,因为它无法使用!

一旦我们声明了参数化构造函数,编译器就不会隐式提供默认构造函数!因此,没有办法创建没有参数传递给不存在的构造函数的对象。

我的问题是为什么我们需要在这种情况下声明默认构造函数 at all

2 个答案:

答案 0 :(得分:5)

你完全正确。 只要有自定义构造函数,就不会创建默认构造函数。

因此,在这种情况下,您不需要声明默认构造函数。

另见§12.1/ 5

  

X默认构造函数是类X的构造函数,可以在不带参数的情况下调用。如果类X没有用户声明的构造函数,则隐式声明没有参数的构造函数   违约(8.4)。 [...]

答案 1 :(得分:1)

是的,作者对默认构造函数的工作方式不正确。他可能会将它与复制构造函数混淆,即使在他的情况下也会自动创建。