设计一个类,我们只能生产该类的一个实例,使用c++演示
#include <iostream> // 包含输入输出流库,允许使用 std::cout 和 std::cin 等函数
#include <mutex> // 包含互斥锁库,用于实现线程安全
// 单例类
class Singleton {
public:
// 禁止拷贝构造函数和赋值运算符
Singleton(const Singleton&) = delete; // 删除拷贝构造函数
Singleton& operator=(const Singleton&) = delete; // 删除赋值运算符
// 获取单例实例的方法
static Singleton& getInstance() {
std::call_once(initInstanceFlag, &Singleton::initSingleton); // 使用 std::call_once 确保只初始化一次单例对象
return *instance; // 返回单例对象的引用
}
// 公有方法示例
void showMessage() {
std::cout << "Hello Singleton!" << std::endl; // 打印消息
}
private:
// 私有构造函数
Singleton() {
std::cout << "Singleton instance created" << std::endl; // 在构造函数中打印消息
}
// 初始化单例实例的静态方法
static void initSingleton() {
instance = new Singleton(); // 创建单例对象
}
// 静态成员变量,保存单例实例
static Singleton* instance;
static std::once_flag initInstanceFlag; // 初始化标志
};
// 初始化静态成员变量
Singleton* Singleton::instance = nullptr;
std::once_flag Singleton::initInstanceFlag;
int main() {
// 获取单例实例,并调用其方法
Singleton& singleton = Singleton::getInstance();
singleton.showMessage();
// 再次获取单例实例,并调用其方法
Singleton& singleton2 = Singleton::getInstance();
singleton2.showMessage();
return 0; // 返回程序退出码
}