Singleton
- C++ kursu
- İleri seviye
- Ders 31/83
- 5 dk
Singleton deseniyle tek örnek sınıf yazmayı öğrenirsin.
Singleton deseni nedir?
Singleton, bir sınıftan program boyunca yalnızca tek örnek (instance) oluşturulmasını sağlayan bir tasarım desenidir. Bu tek örneğe her yerden erişim verilir. Loglama, yapılandırma (configuration) ya da bağlantı havuzu gibi durumlarda sık kullanılır.
C++'ta en temiz yol Meyers singleton adı verilen yöntemdir: statik bir yerel değişken döndüren bir metot yazarsın. Derleyici, tek örnek oluşmasını ve iş parçacığı güvenliğini (thread safety) C++11'den beri garanti eder.
Meyers singleton yazımı
Meyers singleton'da instance() metodu içinde statik yerel değişken tanımlarsın. İlk çağrıda değişken oluşur, sonraki çağrılarda aynı nesne döner. Yapıcı (constructor) private yapılır ki dışarıdan new ile ikinci örnek oluşturulamasın.
Örnek: static Singleton& instance() { static Singleton s; return s; }. Burada static Singleton s; satırı yalnızca bir kez çalışır. private: Singleton() = default; ile dışarıdan kurulum engellenir. Kopyalama de = delete ile kapatılır.
Uygulama Singleton sınıfını yaz
Singleton sınıfını tanımla. public bölümüne static Singleton& instance() metodu ekle; gövdesinde static Singleton s; tanımlayıp döndürsün. Yapıcıyı private yap. main içinde instance()'ı iki kez çağırıp adreslerinin eşitliğini kontrol et; eşitse "Tek örnek" yaz.
Başlangıç kodu
#include <iostream>
// Singleton sınıfını buraya tanımla
int main() {
// instance() metodunu çağır ve sonuçu yazdır
return 0;
}Örnek çözüm
#include <iostream>
class Singleton {
public:
static Singleton& instance() {
static Singleton s;
return s;
}
private:
Singleton() = default;
};
int main() {
auto& a = Singleton::instance();
auto& b = Singleton::instance();
std::cout << (&a == &b ? "Tek örnek" : "Çok örnek");
return 0;
}Beklenen çıktı
Tek örnek
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Singleton deseni neyi garanti eder?
- Sınıfın daha hızlı çalışmasını
- Tüm metotların statik olmasını
- Program boyunca tek örnek oluşmasını Doğru cevap
- Özel üyelerin public olmasını
Açıklama: Singleton, bir sınıftan yalnızca tek örnek oluşturulmasını sağlar.
2 instance metodunu tamamla
static Singleton& ____() {
static Singleton s;
return s;
}
static Singleton& instance() {
static Singleton s;
return s;
}
Açıklama: instance() metodu statik yerel değişkeni döndürür.
3 Parçayı rolüne eşle
| Kavram | Anlamı |
|---|---|
static Singleton& instance() |
Tek örnek döndürür |
private Singleton() |
Dışarıdan kurulumu engeller |
static yerel değişken |
İş parçacığı güvenli |
Meyers singleton |
En temiz C++ yöntemi |