常规类如何在c ++中具有单例子类

时间:2015-12-11 12:54:47

标签: c++ singleton

所以我有一个用户类,它有两个子类:manager和regular_User,我希望manager是singleton。 任何人都可以帮我怎么做? 谢谢!

class user{
  public:
    //sth
  protected:
    //sth
};

class manager:public user{ //i want this to be singleton
//
};

class regular_user:public user{

};

2 个答案:

答案 0 :(得分:1)

虽然我质疑为什么您希望manager成为单身人士,但您可以使用匿名 class来实现某些目标(或struct)只有一个实例:

struct user {
    static struct {
    } manager;
};

有趣的是为匿名struct分配存储空间,因为您不知道其类型!你需要这样做,否则你会得到链接时错误。但是C ++ 11有办法。包括

namespace {
    decltype(user::manager) user::manager;
}

只有一个编译单元。

答案 1 :(得分:1)

首先,要使类Manager成为类User的子类,您需要使用class Manager : public User之类的东西来声明它。然后,为了使类Manager成为Singleton类,您需要保证只能创建该类的一个实例(一个对象)。如果你创建了它的所有类成员变量和成员函数static,那么这些成员只会被创建一次。