Usare il pattern Singleton in C++

Usare il pattern Singleton in C++

Personalmente trovo Singleton utile in alcuni casi.

E quindi continuo ad usarlo anche se a molti non piace.

Ne abbiamo visti diversi esempi in vari linguaggi, ed oggi aggiungiamo l'esempio in C++.

Abbiamo tre file:

  • singleton.h
  • singleton.cpp
  • main.cpp

Cominciamo dal primo:

#ifndef SINGLETON_H
#define SINGLETON_H

#include <iostream>

using namespace std;

class Singleton {
public:
    static Singleton *getInstance();
    void ciaoSingleton();

private:
    Singleton();
    static Singleton *instance;
};

#endif // SINGLETON_H

Come al solito rendiamo il costruttore privato, in modo da non poterlo richiamare da classi esterne.

Questa la sua implementazione:

#include "singleton.h"

Singleton* Singleton::instance = 0;

Singleton* Singleton::getInstance() {
    if (instance == 0) {
        instance = new Singleton();
    }
    return instance;
}

void Singleton::ciaoSingleton() {
    cout << "Ciao da Singleton!";
}

Singleton::Singleton(){
}

Nel metodo getInstance() controlliamo se esiste già una istanza, e agiamo di conseguenza.

Il metodo ciaoSingleton() serve solo per stampare qualcosa in console.

Infine il costruttore vuoto (in questo caso non ci dobbiamo fare nulla, ma può essere utile in altri casi).

Nel main:

#include <iostream>
#include "singleton.h"

using namespace std;

int main(int argc, char *argv[]) {
    Singleton *singleton = Singleton::getInstance();
    singleton->ciaoSingleton();
    return 0;
}

Direi abbastanza easy.

Enjoy!