单例 C++ 饿汉模式
时间: 2024-09-27 14:00:48 浏览: 47
单例是一种设计模式,它保证一个类在整个程序运行期间只有一个实例,并提供一个全局访问点。在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++ 中一种常见的单例设计模式,它的特点是在程序启动时就创建单例对象。下面是一个简单的饿汉模式的示例代码:
```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:
// 构造函数是 private 的,防止外部直接创建对象
Singleton() {} // 这里是“饿汉”做法,即在编译时就创建了唯一实例
// 获取唯一实例的方法
static Singleton& getInstance() {
static Singleton instance; // 使用静态局部变量存储实例
return instance;
}
private:
// 防止通过拷贝构造函数或赋值操作符复制对象
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
};
```
在这个例子中,Singleton 类只有一个实例,并且该实例是在第一次调用 `getInstance()` 时创建的。这种方式的优点是线程安全,因为静态成员在编译时就已经完全初始化。
阅读全文