Singleton* Singleton::s_Instance = nullptr;
时间: 2023-02-28 20:22:25 浏览: 93
这是一行 C++ 代码,它定义了一个静态的空指针变量 s_Instance。该变量是 Singleton 类的静态成员变量,并且初始值为 nullptr。这意味着这个变量在程序整个生命周期内仅有一个实例,并且在整个程序生命周期内,它只能通过 Singleton 类的静态方法来访问。
关于 Singleton,可以说它是一种设计模式,它确保了一个类仅有一个实例,并且提供一个全局访问点来访问该实例。这种设计模式经常用于创建全局单例对象,例如系统配置、数据库连接等。
相关问题
用C++写出懒汉式单例模式和饿汉式单例模式的例子
以下是C++中懒汉式单例模式和饿汉式单例模式的例子:
1. 饿汉式单例模式
```cpp
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 私有构造函数
public:
static Singleton* getInstance() {
return instance;
}
};
Singleton* Singleton::instance = new Singleton(); // 在类外初始化静态成员变量
int main() {
Singleton* s1 = Singleton::getInstance();
Singleton* s2 = Singleton::getInstance();
if (s1 == s2) {
cout << "s1和s2是同一个实例" << endl;
}
return 0;
}
```
2. 懒汉式单例模式
2.1 简易版
```cpp
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 私有构造函数
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr; // 在类外初始化静态成员变量
int main() {
Singleton* s1 = Singleton::getInstance();
Singleton* s2 = Singleton::getInstance(); if (s1 == s2) {
cout << "s1和s2是同一个实例" << endl;
}
return 0;
}
```
2.2 私有嵌套类-回收专用
```cpp
class Singleton {
private:
Singleton() {} // 私有构造函数
~Singleton() {} // 私有析构函数
static Singleton* instance;
class GarbageCollector { // 私有嵌套类
public:
~GarbageCollector() {
if (Singleton::instance != nullptr) {
delete Singleton::instance;
Singleton::instance = nullptr; }
}
};
static GarbageCollector gc; // 静态成员变量,程序结束时自动调用析构函数
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr; // 在类外初始化静态成员变量
Singleton::GarbageCollector Singleton::gc; // 在类外初始化静态成员变量
int main() {
Singleton* s1 = Singleton::getInstance();
Singleton* s2 = Singleton::getInstance();
if (s1 == s2) {
cout << "s1和s2是同一个实例" << endl;
}
return 0;
}
```
2. 利用静态成员和静态函数设计实现一个单件类Singleton。所谓单件类,就是指在内存中最多仅有一个对象实例。提示: a) 不可以用构造函数创建对象,才能确保对象创建是可控的;(通过构造函数私有化来实现的) b) 当
创建一个单件类时,需要注意以下几点:
1. 将构造函数私有化,以防止外部直接通过构造函数创建对象。
2. 定义一个静态成员变量来保存类的唯一实例。
3. 提供一个静态函数来获取类的唯一实例。
4. 在静态函数中判断类的唯一实例是否已经存在,如果不存在则创建一个新的实例并返回,否则直接返回已有的实例。
下面是一个示例代码:
```cpp
class Singleton {
private:
static Singleton* instance; // 静态成员变量用于保存类的唯一实例
Singleton() {} // 私有化构造函数
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
static void destroyInstance() {
delete instance;
instance = nullptr;
}
};
Singleton* Singleton::instance = nullptr; // 初始化静态成员变量
int main() {
Singleton* obj1 = Singleton::getInstance(); // 获取类的唯一实例
Singleton* obj2 = Singleton::getInstance(); // 再次获取实例,应该是同一个对象
if (obj1 == obj2) {
cout << "obj1 and obj2 are the same instance" << endl;
}
Singleton::destroyInstance(); // 销毁类的唯一实例
return 0;
}
```
这样设计的单件类能够确保在内存中只有一个对象实例。