【发布时间】:2019-10-17 15:25:32
【问题描述】:
我正在研究单例设计模式的两种实现。
我想知道第二个是如何工作的,特别是:
为什么作者选择返回 DB 作为参考。
为什么getDatabaseConnection()中的静态类对象DB不需要像这样在SingleDatabase类之外定义:
SingletonDatabase& SingletonDatabase::DB;
- 静态类对象是否像静态变量一样只创建一次(并且在同一类的所有对象之间共享)?
实施
class SingletonDatabase {
private:
SingletonDatabase() {
std::cout << "Initializing database" << std::endl;
instanceCount++; // Used in testing later on.
}
public:
SingletonDatabase(const SingletonDatabase&) = delete;
SingletonDatabase& operator=(const SingletonDatabase&) = delete;
static SingletonDatabase& getDatabaseConnection() {
static SingletonDatabase DB;
return DB;
}
static int instanceCount;
};
int SingletonDatabase::instanceCount = 0;
我习惯于看到使用静态指针的实现,作者提到它不是线程安全的。他更喜欢这种方法。
谢谢!
【问题讨论】:
-
你所说的“静态对象”和“静态变量”其实是一样的。符号
DB是一个变量。变量包含对象。
标签: c++ class design-patterns static singleton