类将指针指向其实例作为私有成员的原因是什么?

时间:2015-06-24 07:59:16

标签: c++ class reference static private

我不知道这个概念是否有名字。我有一个班级声明;

class A
{
    public:
      ...
    private:
      static A* me;
}
  • 这是一种模式吗?
  • 为什么有人这样做?

3 个答案:

答案 0 :(得分:4)

没有更多代码来诊断意图,它看起来很像 Singleton模式的实现

stackoverflow和维基百科上有很多参考资料;

你会发现可能有一些“获取实例”方法或朋友工厂方法的实现。

class A {
public:
    static A* getInstance();
// or
    friend A* getInstance();

private:
    static A* me;
};

为什么要这样做?引用维基百科

  

在软件工程中,单例模式是一种设计模式,将类的实例化限制为一个对象

答案 1 :(得分:1)

我之前在Singletons中看过这个。

单例是一个只能在内存中存在一次的对象。为了达到这个目的,你可以“隐藏”它的构造函数,并将它的实例暴露给一个访问器(如getInstance())到对象的私有静态实例。这就是为什么它保留了一个私有指针。

这个想法是每次调用getInstance()时都会返回指向静态实例的指针。这样就可以确保Class只有一个实例。

可以找到关于Singleton的教程here

答案 2 :(得分:1)

单独它没有重要意义。但是,如果再加上static A& getInstance()函数,它看起来更像是单例模式。

单例模式基本上是一种只创建该类的1个实例的方法,该实例在程序的任何地方都使用。

我更喜欢实现此模式的另一种方式。除个人偏​​好外,没有特别的理由使用这种实施方式。

class A{
private:
    class A(){}                  //To make sure it can only be constructed inside the class.
    class A(const A&) = delete;
    class A(A&&) = delete;      //To make sure that it cannot be moved or copied
public:
    static A& getInstance(){
        static A inst;             //That's the only place the constructor is called.
        return inst;
    }
};

希望有所帮助。