C++ 如何在基类中使默认构造函数私有?

C++ 如何在基类中使默认构造函数私有?,c++,oop,inheritance,singleton,c++17,C++,Oop,Inheritance,Singleton,C++17,我想有一个类,当我们从它继承时,它使另一个类成为单例,所以我写了以下内容: 模板 结构单体 { 公众: 静态类*get_实例(void) { 如果(!对象) { 对象=新类; } 返回对象; } 受保护的: 静态类*对象; 单例(无效)=默认值; 私人: 单例(const singleton&)=删除; 单例&运算符=(常量单例&)=delete; }; 样板 类*单例::对象{nullptr}; 我就是这样使用它的: struct some_base_类:公共单例 { 私人: 大小m_变量;

我想有一个类,当我们从它继承时,它使另一个类成为单例,所以我写了以下内容:

模板
结构单体
{
公众:
静态类*get_实例(void)
{
如果(!对象)
{
对象=新类;
}
返回对象;
}
受保护的:
静态类*对象;
单例(无效)=默认值;
私人:
单例(const singleton&)=删除;
单例&运算符=(常量单例&)=delete;
};
样板
类*单例::对象{nullptr};
我就是这样使用它的:

struct some_base_类:公共单例
{
私人:
大小m_变量;
公众:
静态自动生成(常量大小\u t变量)
{
自动o{singleton::get_instance()};
o->m_变量=var;
返回o;
}
};
但是这里的
某些基本类
不是单例,因为在
单例
类中,我们将默认构造函数设置为受保护的成员,我试图将其设置为私有成员,但出现以下错误:

 use of deleted function ‘some_base_class::some_base_class()’
使用已删除函数'some_base_class::some_base_class()'

为什么??我只是在基类中将其设为私有成员,并将其标记为
=default
而不是
=delete
!。如何在基类中使默认构造函数私有?

看起来此错误是指您所使用的参数化构造函数 已标记删除。。。 如果可以的话,请使用类而不是结构,因为在默认情况下,如果不指定它们为公共或受保护的,则所有成员都是私有的

如何在基类中使默认构造函数私有

您可以使用访问说明符:

struct base {
private:  // this here
    base() = default;
我得到了这个错误:

 use of deleted function ‘some_base_class::some_base_class()’
为什么?

因为您尝试默认初始化派生类


由于基的默认构造函数是私有的,因此隐式生成的派生类型构造函数将被删除。这是因为由于缺少对构造函数的访问,无法构造基类。

所以这意味着我可以拥有一个单例基类,并使用它来创建继承了该基类的其他类单例?@Ghasemarezani不,你不能拥有这样的基类。