如何存储单例类的引用

How to store a reference of a singleton class?

本文关键字:单例类 引用 存储 何存储      更新时间:2023-10-16

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

我已经为Dealer制作了instance()方法,这部分是我困惑的地方:

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

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

你总是可以将Dealer实例的引用传递给Player类的构造函数:

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

无论它是在堆栈上、堆上还是作为单例实例构造的。


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

一般推荐的c++单例实现模式是
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;
};