Nije stvar u jednostavnosti ili slozenosti, nego smisao singleton-a.
Ovo sto si ti napravio, to nije SINGLETON!
Naime ideja singleton-a je da ga nitko ne moze kreirati, on je jedan jedini za sve.
Svi mu mogu pristupati preko njegove public funkcije.
Kako ces onemoguciti korisnika da na svoju ruku kreira vise objekata?
Tako sto ce ti kostruktor biti ili privatan ili protected.
Evo rjesenja.
Sa ovim rjesenjem nemas problema sa oslobađanjem memorije, objekt postoji prije i nakon main-a.
// Singleton.h
Code:
#ifndef SINGLETON_H__
#define SINGLETON_H__
class Singleton {
public:
static Singleton* Instance();
void Work () const;
protected:
Singleton();
private:
static Singleton _instance;
};
#endif // SINGLETON_H__
// Singleton.cpp
Code:
#include <iostream>
#include "Singleton.h"
Singleton Singleton::_instance;
Singleton::Singleton ()
{
}
void Singleton::Work () const
{
std::cout << "Singleton" << std::endl;
}
Singleton * Singleton::Instance ()
{
return &_instance;
}
// main.cpp
Code:
#include <iostream>
#include "Singleton.h"
int main ()
{
Singleton *sng = Singleton::Instance(); // OK
sng->Work(); // OK
Singleton sng; // compiler ERROR -> NOK
Singleton *sng = new Singleton; // compiler ERROR -> NOK
}