#include <iostream>
#include <mutex>
class Singleton {
private:
// 私有构造函数,防止外部实例化
Singleton() {
std::cout << "Singleton instance created." << std::endl;
}
// 删除拷贝构造函数和赋值操作符
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
// 静态成员变量保存唯一的实例
static Singleton* instance;
public:
// 获取唯一实例的静态方法
static Singleton* getInstance() {
if (instance == nullptr) {
std::lock_guard<std::mutex> lock(mutex_);
if (instance == nullptr) {
instance = new Singleton();
}
}
return instance;
}
// 释放资源
static void destroy() {
if (instance != nullptr) {
delete instance;
instance = nullptr;
}
}
private:
// 互斥锁保证线程安全
static std::mutex mutex_;
};
// 初始化静态成员变量
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mutex_;
int main() {
// 获取单例对象
Singleton* singleton = Singleton::getInstance();
// 使用完毕后销毁单例对象
Singleton::destroy();
return 0;
}
Singleton()
是私有的,防止外部通过构造函数创建对象。static Singleton* instance;
用于保存唯一的实例。getInstance()
:提供全局访问点,使用双重检查锁定模式(Double-Checked Locking Pattern)来确保线程安全。std::mutex mutex_;
用于在多线程环境中保证线程安全。destroy()
方法:用于手动销毁单例对象,释放资源。这个实现方式是线程安全的,并且遵循了单例模式的基本原则。
上一篇:c++ 引用
下一篇:opencv c++
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站