c++ 单例 饿汉模式
时间: 2023-08-16 18:12:23 浏览: 134
饿汉模式是 C++ 中一种常见的单例设计模式,它的特点是在程序启动时就创建单例对象。下面是一个简单的饿汉模式的示例代码:
```cpp
class Singleton {
private:
static Singleton* instance;
// 私有构造函数,防止外部实例化对象
Singleton() {}
public:
// 获取单例对象的静态方法
static Singleton* getInstance() {
return instance;
}
};
// 在类外初始化静态成员变量
Singleton* Singleton::instance = new Singleton();
```
在上面的示例中,私有的构造函数确保无法在类外部直接实例化对象。通过静态成员变量 `instance` 来保存单例对象的引用,而该变量在类外部进行了初始化。
可以通过 `Singleton::getInstance()` 方法来获取该单例对象的引用。由于饿汉模式在程序启动时就创建了对象,所以在任何需要使用该单例对象的地方,都可以直接调用 `getInstance()` 方法获取。
需要注意的是,饿汉模式没有线程安全的保证,如果多个线程同时调用 `getInstance()` 方法,可能会导致创建多个实例。如果需要线程安全,可以使用懒汉模式或者加锁机制来实现。
相关问题
单例 C++ 饿汉模式
单例是一种设计模式,它保证一个类在整个程序运行期间只有一个实例,并提供一个全局访问点。在C++中,"饿汉模式"是创建单例的一种常见做法,即在加载类的时候就完成了单例对象的实例化,因此名称来源于类在初始化阶段就像饥饿的人一样立即获取资源。
饿汉模式的单例实现代码通常如下:
```cpp
class Singleton {
public:
static Singleton& getInstance() {
static Singleton instance; // 实例化在声明时发生
return instance;
}
private:
Singleton() {} // 构造函数私有,防止外部直接实例化
Singleton(const Singleton&) = delete; // 防止拷贝构造
Singleton& operator=(const Singleton&) = delete; // 防止赋值操作
// 其他成员变量和方法...
};
```
在这个模式下,因为实例在编译时就已经创建,所以无论何时请求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* obj = Singleton::getInstance();
return 0;
}
```
2. 懒汉式单例模式:
懒汉式单例模式在第一次使用时才创建单例对象,避免了在程序加载时就占用内存空间。以下是一个示例代码:
```cpp
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 私有构造函数,防止外部实例化对象
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton(); // 第一次使用时创建单例对象
}
return instance;
}
};
Singleton* Singleton::instance = nullptr; // 初始化为nullptr
int main() {
Singleton* obj = Singleton::getInstance();
return 0;
}
```
阅读全文