Code review prostego singletona

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

2

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

Po co dziedziczenie?

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1