图片来源:https://www.pixiv.net/artworks/72641025
Meyer’s Singleton
class Singleton{
public:
static Singleton& instance(){
static Singleton s;
return s;
}
Singleton(const Singleton&)= delete;
Singleton& operator=(const Singleton&)= delete;
private:
Singleton()= default;
~Singleton()= default;
};
或许有用的模板实现
相对灵活,能够返回任意类型的固定对象指针,通过重载运算符略微增加复制语句的复杂度,但并不能阻止类型本身对象的复制
#include <concepts>
template <std::default_initializable T>
struct Singleton {
T* operator->() const {
static T ins;
return &ins;
}
};
可以像这样复制T类型对象内容
T t = *(Singleton<T>().operator->());
参考:
- https://liam.page/2020/10/27/implement-a-singleton-class-template-in-cxx/
- https://zh.cppreference.com/w/cpp/language/storage_duration
- https://www.modernescpp.com/index.php/thread-safe-initialization-of-a-singleton
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。