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

时间:2020-04-28 13:59:29

标签: c++ oop inheritance singleton c++17

我想拥有一个可以使其他类单身的类,所以我这样写:

example$Flag <- ifelse(str_detect(as.character(example$y), as.character(example$x)), 1, 0)

这就是我的使用方式:

example
       x                   y  Flag
1 hungry          i'm hungry     1
2    fly i believe i can fly     1
3    day  a hard day's night     1
4    dog                 cat     0

但是这里template <typename Class, typename T = std::enable_if<std::is_class_v<Class>>> struct singleton { public: static Class* get_instance(void) { if (!object) { object = new Class; } return object; } protected: static Class* object; singleton(void) = default; private: singleton(const singleton&) = delete; singleton& operator=(const singleton&) = delete; }; template <typename Class, typename T> Class* singleton<Class, T>::object{nullptr}; 不是Singleton,因为在struct some_base_class : public singleton<some_base_class> { private: size_t m_variable; public: static auto make(const size_t var) { auto o{singleton<some_base_class>::get_instance()}; o->m_variable = var; return o; } }; 类中,我们将默认构造函数设为受保护的成员,我试图将其构造为私有成员,但出现了此错误:

some_base_class

为什么?我只是将其设为基类的私有成员,并将其标记为singleton而不是use of deleted function ‘some_base_class::some_base_class()’ !如何在基类中使默认构造函数私有?

2 个答案:

答案 0 :(得分:1)

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

您可以使用访问说明符:

struct base {
private:  // this here
    base() = default;

我收到此错误:

 use of deleted function ‘some_base_class::some_base_class()’

为什么?

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

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

答案 1 :(得分:0)

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