Я смотрю на две реализации шаблона проектирования Singleton.
Я хотел бы знать, как работает второй, в частности:
ПочемуАвтор выбрал возвращение БД в качестве ссылки.
Почему статический класс DB объекта в getDatabaseConnection () не нужно определять вне класса 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;
Я привык видеть реализацию со статическим указателем, который автор упомянул как поточно-ориентированный. Он предпочитает этот метод.
Спасибо!