如何存储单例类的引用?

use*_*385 3 c++ singleton

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

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

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

πάν*_*ῥεῖ 5

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

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

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

private:
    Dealer& dealer;
};
Run Code Online (Sandbox Code Playgroud)

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


对于单例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;
};
Run Code Online (Sandbox Code Playgroud)

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

Dealer::instance.foo();
Run Code Online (Sandbox Code Playgroud)

如果你坚持为单例创建一个引用成员,你可以这样做:

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

private:
    Dealer& dealer;
};
Run Code Online (Sandbox Code Playgroud)

  • 我认为 *more* 常见的建议是完全避免单例模式,但对于规范示例 +1。我想知道这是否可以变成模板类? (2认同)