懒汉模式通过局部静态变量实现线程安全且自动管理生命周期;2. 饿汉模式在程序启动时创建实例,天然线程安全但可能浪费资源;3. 带智能指针的懒汉模式结合unique_ptr与once_flag确保延迟加载和线程安全;4. 推荐优先使用局部静态变量的懒汉模式,简洁高效符合现代C++习惯。

单例模式确保一个类只有一个实例,并提供全局访问点。在C++中实现单例模式,关键在于控制构造函数的访问权限、禁止拷贝,并保证线程安全和资源释放。以下是几种常见且有效的实现方式。
懒汉模式在第一次使用时才创建实例,适合启动较慢或可能不使用的场景。
代码示例:
<pre class="brush:php;toolbar:false;">class Singleton {
public:
static Singleton& getInstance() {
static Singleton instance; // 局部静态变量,自动管理生命周期
return instance;
}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
private:
Singleton() = default; // 私有构造函数
~Singleton() = default;
};
饿汉模式在程序启动时就创建实例,适用于确定会使用的场景。
立即学习“C++免费学习笔记(深入)”;
代码示例:
<pre class="brush:php;toolbar:false;">class Singleton {
public:
static Singleton& getInstance() {
return instance;
}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
private:
Singleton() = default;
~Singleton() = default;
static Singleton instance; // 程序启动时构造
};
// 定义静态成员
Singleton Singleton::instance;
使用动态分配配合智能指针,延迟加载的同时避免内存泄漏。
代码示例:
<pre class="brush:php;toolbar:false;">#include <memory>
#include <mutex>
class Singleton {
public:
static Singleton& getInstance() {
std::call_once(initFlag, &Singleton::init);
return *instance;
}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
private:
Singleton() = default;
~Singleton() = default;
static void init() {
instance.reset(new Singleton);
}
static std::unique_ptr<Singleton> instance;
static std::once_flag initFlag;
};
std::unique_ptr<Singleton> Singleton::instance = nullptr;
std::once_flag Singleton::initFlag;
以上就是C++如何实现单例模式的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号