使用c++编写
我们使用了std::shared_ptr来管理Singleton对象的生命周期。当最后一个引用该Singleton对象的std::shared_ptr被销毁时,单例对象也将被自动删除。
注意,这里我们使用std::call_once和std::once_flag来确保初始化只执行一次,这使得我们的实现既简洁又线程安全。
源码
#include <iostream>
#include <mutex>
#include <memory>
class Singleton {
public:
// 静态成员函数作为访问点
static std::shared_ptr<Singleton> getInstance() {
std::call_once(initInstanceFlag, &Singleton::initSingleton);
return instance;
}
Singleton(const Singleton&) = delete; // 禁止复制构造
Singleton& operator=(const Singleton&) = delete; // 禁止赋值
// 若干成员函数,实现业务逻辑
void printMessage() const {
std::cout << "Hello from singleton!" << std::endl;
}
private:
Singleton() {} // 私有构造函数
~Singleton() {} // 私有析构函数
static void initSingleton() {
instance.reset(new Singleton());
}
static std::once_flag initInstanceFlag;
static std::shared_ptr<Singleton> instance;
};