具有空主体的 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). [...]
是的,作者对默认构造函数的工作方式有误。他可能将它与自动创建的复制构造函数混淆了,即使在他的情况下也是如此。
我看到了一些代码 here。
有一个 class,它有一个带有空主体的私有默认构造函数和一个参数化构造函数。 代码注释说默认构造函数是私有的,“因此 not 可以创建没有指定属性的对象”[属性由 class 数据成员表示]。因此,显式定义私有默认构造函数没有用,因为它不能被利用!
一旦我们声明了参数化构造函数,编译器就不会隐式提供默认构造函数!因此,将无法创建不向不存在的构造函数传递参数的对象。
我的问题是为什么我们需要在这种情况下声明默认构造函数完全?
你完全正确。 只要有自定义构造函数,就不会创建默认构造函数。
因此在这种情况下您不需要声明默认构造函数。
另见 § 12.1 / 5
A default constructor for a class
X
is a constructor of classX
that can be called without an argument. If there is no user-declared constructor for classX
, a constructor having no parameters is implicitly declared as defaulted (8.4). [...]
是的,作者对默认构造函数的工作方式有误。他可能将它与自动创建的复制构造函数混淆了,即使在他的情况下也是如此。