Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

singleton obrazac kao template ?

[es] :: C/C++ programiranje :: singleton obrazac kao template ?

[ Pregleda: 5873 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

netoff
Duca Pantelić
USA

Član broj: 15761
Poruke: 42
*.kg.sbb.co.yu.



Profil

icon singleton obrazac kao template ?06.04.2005. u 17:23 - pre 231 meseci
Da li ovo može da bude singleton?

Code:

"singleton.h"
template <class T>
class singleton
{
public:
  singleton(); 
  ~singleton();

T* operator->(){ return _instance;};

private:
  static T* _instance;
  static int _c;
};

"singleton.spp"
template <class T> T* singleton<T>::_instance = 0;
template <class T> int singleton<T>::_c = 0;

template <class T>
singleton::singleton()
{
  if (!_instance)
   _instance = new T();
  ++_c;
}

template <class T>
singleton::~singleton()
{
  --_c;
  if (!_c)
   delete _instance;
}


Izgleda mi suviše prosto da bi radilo. Mora da sam nešto prevideo?






 
Odgovor na temu

ivbrcic
Ivan Brcic
Siemens
Zagreb

Član broj: 38567
Poruke: 35
*.siemens.at.



Profil

icon Re: singleton obrazac kao template ?07.04.2005. u 09:07 - pre 231 meseci
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
}

 
Odgovor na temu

dragansm
Dragan Smiljanic

Član broj: 38170
Poruke: 191
*.nat-pool.bgd.sbb.co.yu.



Profil

icon Re: singleton obrazac kao template ?07.04.2005. u 09:59 - pre 231 meseci
Code:

template< class T >
class Singleton
{
public:
    static T *GetInst()
    {
          static T* inst = new T();
          return inst;
    }
protected:
    Singleton() {}
}


class Dummy : public Singleton<Dummy>
{
    friend Singleton<Dummy>; 
    ....
private:
    Dummy();
}    


Dummy *d = Dummy::GetInst();
d->Use...

delete d; 


 
Odgovor na temu

netoff
Duca Pantelić
USA

Član broj: 15761
Poruke: 42
*.kg.sbb.co.yu.



Profil

icon Re: singleton obrazac kao template ?07.04.2005. u 10:29 - pre 231 meseci
Da poznata su mi ta rešenja sa GetInstance...() i privatnim konstruktorom. Ali ono sto mene interesuje, da li je moguce singleton izvesti bez korisćenja takve GetInstance() sintakse. U tom smislu, zašto moje rešenje ne predstavlja singleton i zasto ono neće raditi??
 
Odgovor na temu

dragansm
Dragan Smiljanic

Član broj: 38170
Poruke: 191
*.nat-pool.bgd.sbb.co.yu.



Profil

icon Re: singleton obrazac kao template ?07.04.2005. u 12:17 - pre 231 meseci
da bi se pozvalo
Code:

 _instance = new T();


ctr klase T mora biti public. Zbog toga mozes da napises:

Code:

T *t1 = new T();  // 1. instanca
T *t2 = new T();  // 2. instanca
singleton<T> tt1; // 3. instanca 
singleton<T> tt2; // 3. instanca



bez koriscenja singletona. Sustina singletona je da imas samo jednu instancu klase.
 
Odgovor na temu

netoff
Duca Pantelić
USA

Član broj: 15761
Poruke: 42
*.kg.sbb.co.yu.



Profil

icon Re: singleton obrazac kao template ?07.04.2005. u 12:56 - pre 231 meseci
Ne. Konstruktor klase T bi bio protected a singleton bi bila friend klasa, tako da moze da kreira novi objekat klase T. Da li bi to resnje moglo do bude adekvatno?
 
Odgovor na temu

toroman
Srećko Toroman
www.wowd.com
Beograd / Banja Luka

Član broj: 52673
Poruke: 159
*.dialup.blic.net.

Sajt: toroman.wordpress.com


Profil

icon Re: singleton obrazac kao template ?08.04.2005. u 01:07 - pre 231 meseci
Po meni, koliko sam mogao da vidim, to jeste vrsta singletona. Naime, koliko god objekata tog singletona da napraviš, svi upućuju na isti objekat. Dakle to jeste VRSTA singletona. Pod pravim se podrazumijeva ovo što je ivbrcic postavio. To je pravi singleton. Ali i ovaj tvoj template ima sličnosti. Samo jednu instancu. Ali za razliku od ivbrcic-evog koda, ti možeš da pozoveš konstruktor. Prvi put kad pozoveš konstruktor, objekat će se ZAISTA kreirati. Od tad, pa nadalje, svaki put kad pozoveš konstruktor, tebi se samo uveća counter _c za jedan (kao evidencija o broju "instanci") a vrijednost koju će operator -> vratiti ostaje ista.

Ovakve vrste objekata se ipak koriste u druge svrhe. Možda o tome možeš da pročitaš nešto više u maltene svim knjigama koje je izdao Bruce Eckel :) On uvije mora da definiše šta je to singleton :) za svaki jezik, koji manijak ...
Programeri su odgovorili na Hamletovo pitanje "Biti il ne biti?" :
0x2B | ~0x2B = 0xFF
(kao ono - ff - teško pitanje!)
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.in-addr.btopenworld.com.



+4 Profil

icon Re: singleton obrazac kao template ?08.04.2005. u 13:36 - pre 230 meseci
Najdetaljniju obradu teme o singleton-ima ( i josh gomilu naprednih reshenja) imash u knjizi "Modern C++ design", by Andrei Alexandrescu. Obavezno prochitaj!

Anyway, reshenje koje ja koristim (kratko i jednostavno, intrusive reshenje, ali ne preterano elegantno), a koje ti omogucava da ubacish Singleton-pattern u bilo koju vec kreiranu klasu :

Code:

#define DECLARE_SINGLETON(n) public: static n& GetInstance(); private: n(); virtual ~n(); public:


#define IMPLEMENT_SINGLETON(n) n& n::GetInstance() {static n Instance; return instance;}


Na kraju, za klasu koju definishesh ka singleton dodash i malu sintaksnu olakshicu
Code:
#define MyClass::GetInstance() g_MyClass


 
Odgovor na temu

ivbrcic
Ivan Brcic
Siemens
Zagreb

Član broj: 38567
Poruke: 35
*.siemens.at.



Profil

icon Re: singleton obrazac kao template ?08.04.2005. u 13:57 - pre 230 meseci
Za sve koje zanima singleton, i ne samo to vec i druge stvari svakako jos uvijek ponajbolja knjiga je:
"Design Patterns" by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

Evo linka, pa koga zanima...


[url] http://rapidshare.de/files/701...ect-Oriented_Software.chm.html [/url]
 
Odgovor na temu

toroman
Srećko Toroman
www.wowd.com
Beograd / Banja Luka

Član broj: 52673
Poruke: 159
*.dialup.blic.net.

Sajt: toroman.wordpress.com


Profil

icon Re: singleton obrazac kao template ?08.04.2005. u 15:05 - pre 230 meseci
Hvala za knjigu, btw, mrzim rapidshare :)

Hvala još jedanput ivbrčić-u.A ti Nasty, code ti je, što bi Englezi rekli "evil" zao :) Mnogo.
Programeri su odgovorili na Hamletovo pitanje "Biti il ne biti?" :
0x2B | ~0x2B = 0xFF
(kao ono - ff - teško pitanje!)
 
Odgovor na temu

netoff
Duca Pantelić
USA

Član broj: 15761
Poruke: 42
*.kg.sbb.co.yu.



Profil

icon Re: singleton obrazac kao template ?08.04.2005. u 16:00 - pre 230 meseci
Zahvaljujem svima na iscrpnim odgovorima, koji su pomogli da iskristališem on što mi je potrebno.
Citat:
NastyBoy: Najdetaljniju obradu teme o singleton-ima ( i josh gomilu naprednih reshenja) imash u knjizi "Modern C++ design", by Andrei Alexandrescu. Obavezno prochitaj!


Knjiga je zaista odlična i otvara nove poglede na c++. Aili singleton koji Alexandrescu daje je isuviše moćan za moje potrebe (a i koristi standardnu GetInstance() sintaksu), što je i bio razlog da postavim ovu temu, a u potrazi za jednostavnim hardcoded (bez policy-a), singethread singleton obrascem. Alexandrescu svakao razmatra svaki mogući aspekt korišćenja singleton-a, i to stavlja u odgovrajući policy, ali njegov pristup i dalje ostaje "standradan". Verovatno da to što sam zamislio predstavlja negi drugi obrazac što više nije ni bitno, jer sam u međuvremenu promenio pristup, tako da će i neki od ovih konvencionalnih singleton-a poslužiti. No da stavimo tačku na singleton, jer je verovatno rečeno sve što može o singleton-u da se kaže. Ono što mene interesuje je, da li neko od vas u komercijalne svrhe koristi metaprograming i obrascne na način na koji ih je predstavio Alexandrescu, i ako je tako da li koristite Loki, boost::mpl ili nešto treće. Koliko mislite da je isplativo projektovati na ovaj način i da li je to vredno uloženog vremena.
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.in-addr.btopenworld.com.



+4 Profil

icon Re: singleton obrazac kao template ?08.04.2005. u 17:22 - pre 230 meseci
Citat:
Ono što mene interesuje je, da li neko od vas u komercijalne svrhe koristi metaprograming i obrascne na način na koji ih je predstavio Alexandrescu, i ako je tako da li koristite Loki, boost::mpl ili nešto treće. Koliko mislite da je isplativo projektovati na ovaj način i da li je to vredno uloženog vremena.


U game-engineu na kom se trenutno radi u mojoj firmi koristi se dosta od pomenutih tehnika. Narochito za stvari kao shto su templejtovana serijalizacija, intrusive smart-pointers, RTTI, (statichka) komunikacija editora sa engine-om preko parsovanja source fajlova (mislim da je parser iz boost-a), kao i type-liste za definisanje protokola za komunikaciju. "Sitne" stvari se takodje koriste, kao npr. templejtovani Hasher koji remapira stringove u editoru u ID-ove u samom engine-u... Ima toga dosta, ne mogu svega ni da se setim na brzinu :)

U svakom sluchaju, kod medium to big size projects, svaka investicija vremena i resursa u proverene obrasce kodiranja se vishestruko isplati (to se uvek nauchi na sopstvenim greshkama, na zhalost!)
 
Odgovor na temu

dezelin32
Aleksandar Dezelin
Informatika
Beograd

Član broj: 33723
Poruke: 60
*.informatika.com.

ICQ: 294745833
Sajt: dezelin.blogspot.com


Profil

icon Re: singleton obrazac kao template ?18.04.2005. u 19:24 - pre 230 meseci
Nista od ovog koda nije thread-safe jer u metodi GetInstance() operacija new nije atomska - moguce je doci u situaciju da dva thread-a kreiraju jednu instancu vise. Potreban je tu kod za sinhronizaciju.
Linux is like wigwham, no windows, no gates and apache inside...
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
..31.216.81.gus.vf.siwnet.net.

Sajt: dejan.lekic.org


+2 Profil

icon Re: singleton obrazac kao template ?20.04.2005. u 08:05 - pre 230 meseci
Ove gore implementacije Singleton obrasca (pattern) su vise nego smesne. Niti su sigurne (pogotovo ne za primenu u visenitnim programima), niti su type-safe.
Najbolju implementaciju Singleton-a koju sam do sada video mozete naci u odlicnoj knjizi "Modern C++ Design: Generic Programming and Design Patterns Applied", Andrei Alexandrescu . Fajlove Singleton.(h|cpp) i Threads.h prilazem zapakovane uz poruku.
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
Prikačeni fajlovi
 
Odgovor na temu

NastyBoy
Bojan Nastic
UK

Član broj: 12041
Poruke: 895
*.in-addr.btopenworld.com.



+4 Profil

icon Re: singleton obrazac kao template ?20.04.2005. u 13:23 - pre 230 meseci
Leko, Alexandrescu je vec pomenut kao izvor za duboku analizu Singleton-a, kome je potrebno.
Razlog za stavljanje jednostavnih reshenja je i u ovome: "Ali singleton koji Alexandrescu daje je isuviše moćan za moje potrebe (a i koristi standardnu GetInstance() sintaksu), što je i bio razlog da postavim ovu temu, a u potrazi za jednostavnim hardcoded (bez policy-a), singethread singleton obrascem."
Dakle, zashto komplikujete stvari?
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
..31.216.81.gus.vf.siwnet.net.

Sajt: dejan.lekic.org


+2 Profil

icon Re: singleton obrazac kao template ?20.04.2005. u 14:31 - pre 230 meseci
S obzirom da covek daje kod kao public domain, ne vidim razlog da ga ne uzmes i ne iskoristis - zbog toga sam i prilozio kod. Ne vidim razlog da se nesto sto vec postoji, besplatno, pise iznova i sumnjivog kvaliteta... No tvoja stvar...
Da ne bih ja komplikovao stvari, pocni od http://www.codeproject.com/cpp/singleton.asp .
Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

netoff
Duca Pantelić
USA

Član broj: 15761
Poruke: 42
*.kg.sbb.co.yu.



Profil

icon Re: singleton obrazac kao template ?20.04.2005. u 22:06 - pre 230 meseci
Bojan je sve već rekao, nema stvarno potrebe da se dalje komplikuje nešto što je već jasno i rečeno. Tako da, iako imam šta da kažem na osnvu Dejanovog i Aleksandrovog komnetara, tj više imam da kažem o suvišnosti njihovih postova, mislim da stavimo tačku na ovu singleton priču.
 
Odgovor na temu

mack

Član broj: 413
Poruke: 49
*.neobee.net.



Profil

icon Re: singleton obrazac kao template ?21.04.2005. u 09:34 - pre 230 meseci
A da li negde moze da se skine aleksandreskuova knjiga ?
mack
 
Odgovor na temu

dezelin32
Aleksandar Dezelin
Informatika
Beograd

Član broj: 33723
Poruke: 60
*.informatika.com.

ICQ: 294745833
Sajt: dezelin.blogspot.com


Profil

icon Re: singleton obrazac kao template ?21.04.2005. u 09:39 - pre 230 meseci
Citat:
tj više imam da kažem o suvišnosti njihovih postova


Suvisno ili ne, mislio sam da neznas da singleton ima i visenitnu dimenziju.

cheers
Linux is like wigwham, no windows, no gates and apache inside...
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.dyn.optonline.net.



+6 Profil

icon Re: singleton obrazac kao template ?22.04.2005. u 03:06 - pre 230 meseci
Citat:
mack: A da li negde moze da se skine aleksandreskuova knjiga ?


Ovde je prvo i ključno poglavlje.

http://www.informit.com/articles/article.asp?p=167842&redir=1
 
Odgovor na temu

[es] :: C/C++ programiranje :: singleton obrazac kao template ?

[ Pregleda: 5873 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.