21 Aralık 2016 Çarşamba

Singleton

call_once Singleton
Lazy Singleton mutex kullanmadan şöyle yazılabilir.
class Singleton{

private:
  static std::unique_ptr<Singleton> instance;
  static std::once_flag onceFlag;
  Singleton();

public:
  static Singleton& getInstance(){
    std::call_once(onceFlag,[&]{
       instance = std::unique_ptr<Singleton>(new Singleton());    
    });
    return *instance;
  }

};
Thread Local Static Singleton
Template kullanarak şöyle yaparız. static nesne uygulamadan çıkarken (application exit) temizlenir (cleanup).
template <class T>
class Singleton
{
public:
  static T& getinstance()
  {
    static T t;
    return t;
  }
};
Eğer static uygulamadan çıkarken otomatik yok olmasın istersek pointer kullanırız. Şöyle yaparız.
Singleton & Singleton::getInstance()
{
  static Singleton* instance = new Singleton ();
  return *instance;
}

Hiç yorum yok:

Yorum Gönder