何时允许将默认构造函数设为私有?
When is it permitted to make the default constructor private
我有两个类,一个允许将唯一显式声明的构造函数(无参数的构造函数)设为私有。我最近添加了另一个类,但由于使无参数构造函数私有而导致编译时错误。唯一的区别是前者有一个公共静态工厂方法,而后者有一个接受参数的非静态构造函数。
谢谢,希望这对你有意义。
好的,我给你一些代码:
这不能编译:
class GridElem {
public:
GridElem(const char _idata);
~GridElem();
private:
GridElem();
}
class GridElem {
public:
GridElem(const char _idata);
~GridElem();
GridElem();
}
class MyClass {
public:
~MyClass();
private:
MyClass();
不是一个完整的例子,抱歉,但我相信这显示了异常出现的地方,可能来自扩展cocos2d::Layer
?
编辑
我找到了执行此操作的调用(eclipse找不到它:()
在头
GridElem myGrid [15] [15],
MyClass::MyClass(): myGrid{0} {}
我最近才从一个较小的网格中改变它,并显式地给出每个元素(因为它仍然只是0,因为需要更多的信息),我认为现在必须扩展到无参数c'tor。我完全忘记了,抱歉,但这不是百分之百明显的错误。
你可以将默认构造函数设为私有(或者根本没有默认构造函数)。
你不能做的是在类(或它的友类)之外使用私有默认构造函数。
你没有提供足够的上下文来确定,但我怀疑你的问题是你代码中的其他东西试图默认构造一个GridElem
,所以它需要是公共的。
唯一的区别是前者有一个公共静态工厂方法,而后者有一个接受参数的非静态构造函数。
如果MyScene
有一个工厂方法,那么它是一个成员,可以调用私有默认构造函数。没有什么"异常",您刚才说这两种类型都只能由它们自己的成员函数(和友元)默认构造,但它们中只有一个具有实际做到这一点的成员函数。
将默认构造函数设为私有通常意味着您需要所有
创造要经过一个工厂。所以使用factory,或者将其设为public
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 初始化具有非默认构造函数的std::数组项的更好方法
- 具有默认模板类型的默认构造函数的类型推导
- 如何使用非默认构造函数实例化模板化类
- 为什么不调用移动构造函数?(默认情况下只有构造器,没有别的)
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 声明没有默认构造函数的字段
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- 没有默认构造函数作为模板参数的自定义比较器
- C++17 没有默认构造函数的地图放置(私有默认构造函数)
- 使用移动调用对等构造函数unique_ptr默认构造函数
- C++复制构造函数和默认构造函数
- 将向量从 N1 缩小到 N2 项,而不触发默认构造函数并仅使用 move 语义
- 构造函数默认公共和私有变量
- 类模板构造函数默认参数
- 构造函数默认参数
- C++模板构造函数默认参数
- 在c++中设置构造函数默认值
- c++构造函数默认参数
- C++构造函数默认值头文件