C++单例模式

图片来源:https://www.pixiv.net/artworks/72641025

Meyer’s Singleton

利用C++11保证静态局部变量初始化线程安全的特性

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->());

参考:

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注