如何存储单例类的引用?

时间:2014-05-08 18:25:38

标签: c++ singleton

我正在开展一个与经销商向玩家发牌的项目 我有单例类Dealer和另一个名为Player的类。

我为instance()制作了Dealer方法,这部分让我感到困惑:

对于单例Player类,如何创建一个名为dealer的私有成员,该成员拥有对单例Dealer实例的引用?

1 个答案:

答案 0 :(得分:4)

首先,你应该问问自己,如果你真的需要一个单一类来解决这个问题。

您始终可以将对Dealer实例的引用传递给Player类的构造函数:

class Player {
public:
    Player(Dealer& dealer_) : dealer(dealer_) {}

private:
    Dealer& dealer;
};

无论如何,它是在堆栈上,堆上还是作为单例实例构建的。


  

对于单例Player类,如何创建私有成员... _

commonly recommended c++ singleton implementation pattern

class Dealer{
public:
     static Dealer& instance() {
         static Dealer theDealer;
         return theDealer;
     }

     void foo() {}
private:
     Dealer() {}
     Dealer(const Dealer&) = delete;
     Dealer& operator=(const Dealer&) = delete;
};

注意:您不一定需要在客户端类中存储对Dealer类的引用,但您只需访问单例实例并调用所需的非静态成员函数

Dealer::instance.foo();

如果您坚持要为单身人士创建参考成员,您可以这样做:

class Player {
public:
    Player() : dealer(Dealer::instance()) {}

private:
    Dealer& dealer;
};