call_once Singleton
Lazy Singleton mutex kullanmadan şöyle yazılabilir.
Template kullanarak şöyle yaparız. static nesne uygulamadan çıkarken (application exit) temizlenir (cleanup).
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 SingletonTemplate 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