我正在做一个与经销商向玩家发牌有关的项目。
我有单例类Dealer和另一个名为Player.
我已经制定了instance()方法Dealer,这部分是我感到困惑的地方:
对于单例Player类,如何创建一个名为的私有成员dealer来保存对单例Dealer实例的引用?
首先你应该问问自己,你是否真的需要一个单例类来解决这个问题。
您始终可以将实例的引用传递给类Dealer的构造函数Player:
class Player {
public:
Player(Dealer& dealer_) : dealer(dealer_) {}
private:
Dealer& dealer;
};
Run Code Online (Sandbox Code Playgroud)
无论如何,它是在堆栈上、堆上还是作为单例实例构建的。
对于单例
Player类,如何创建私有成员..._
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)