图片来源: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->());
参考: