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

C++ Private Default Constructor with Empty Body

我看到了一些代码 here

有一个 class,它有一个带有空主体的私有默认构造函数和一个参数化构造函数。 代码注释说默认构造函数是私有的,“因此 not 可以创建没有指定属性的对象”[属性由 class 数据成员表示]。因此,显式定义私有默认构造函数没有用,因为它不能被利用!

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

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

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

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

另见 § 12.1 / 5

A default constructor for a class X is a constructor of class X that can be called without an argument. If there is no user-declared constructor for class X, a constructor having no parameters is implicitly declared as defaulted (8.4). [...]

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