我正在开展一个与经销商向玩家发牌的项目
我有单例类Dealer
和另一个名为Player
的类。
我为instance()
制作了Dealer
方法,这部分让我感到困惑:
对于单例Player
类,如何创建一个名为dealer
的私有成员,该成员拥有对单例Dealer
实例的引用?
答案 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;
};