Code review prostego singletona

Code review prostego singletona
Craith
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 4 lata
  • Postów:146
0

Hejo,
czy ma ktoś chęć i czas aby poświecić na 'review' kodu poniżej? Wiem, ze zakładam w linii 21. obecność default constructora dla typu T.
https://ideone.com/JQouRY

edytowany 1x, ostatnio: Craith
Craith
Tak widziałem, chciałem napisać oo swojemu
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:mniej niż minuta
2

Już samo hasło "Singleton" jest dla mnie synonimem "crap code".

Po co dziedziczenie?


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
Craith
Chciałem napisać w taki sposób, wydawało mi się to ciekawe
JU
Bez przesady, to że singletony powinno się ograniczać i czasami są lepsze sposoby, to nie znaczy, żeby nie używać ich w ogóle. Albo, że kod, który je używa jest do śmieci.
MarekR22
singletony to takie złoto głupców. Każdy newbie się na niego rzuca by powiedzieć, że zna wzorce projektowe i pisze projekt z 20 singletonami. Ten wzorzec zwykle po prostu ukrywa fakt, że durny developer używa zmiennych globalnych.
JU
Nie bronię durnych deweloperów, tylko singletona. Dlaczego singleton został okrzyknięty antywzorcem? Ze względu na to, co mówisz. Ale to nie znaczy, że jest zły i jego użycie grozi śmiercią.
stryku
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 2 lata
  • Postów:607
1
  1. Czemu trzymasz statyczne membery? Nie lepiej by było miec je w funkcji? Co jak teraz zaincludujesz singleton w paru miejscach? Możesz mieć błędy linkera bo będzie widział kilka takich samych instancji memberów.
  2. Czemu ctor nie jest usunięty? Mógłbyś też usunąć move ctor i operator=. Po co publiczny destruktor? Trochę nie wiem jaki chcesz dać userowi interfejs tego singletona
  3. Czemu nie call_once zamiast mutexa?
  4. instance.reset(new T {}); czemu nie make_unique?
  5. *instance.get(); po co get()?
  6. std::unique_ptr<T> Singleton<T>::instance { nullptr }; unique_ptr po stworzeniu już będzie nullptr, więc niepotrzebnie tutaj jawnie inicializujesz
  7. synchronizacja
    [thread 1] getInstance()
    [thread 1] jest w 22. linii
    [thread 2] wywłaszcza
    [thread 2] deleteInstance() i robi sobie coś dalej
    [thread 1] wywłaszcza, wykonuje 24 linię przy akompaniamencie fajerwerków
  8. całe to deleteInstance dałbym tam tylko gdyby był bardzo ważny powód
  9. [main 52] Nie jest to potrzebne bo trzymasz instancję jako statyczny unique_ptr. Destruktory statycznych rzeczy są wołane po wyjściu z maina, więc unique_ptr i tak po sobie posprząta

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.