CodeBlanks Logo Icon CodeBlanks

Singleton

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

main.cpp
#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

main.cpp
#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

Soru
static Singleton& ____() {
        static Singleton s;
        return s;
    }
Cevap
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

İleri seviye bölümündeki tüm dersler