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
0
2
Już samo hasło "Singleton" jest dla mnie synonimem "crap code".
Po co dziedziczenie?
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.
- 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
- Czemu nie call_once zamiast mutexa?
-
instance.reset(new T {});
czemu niemake_unique
? -
*instance.get();
po coget()
? -
std::unique_ptr<T> Singleton<T>::instance { nullptr };
unique_ptr po stworzeniu już będzie nullptr, więc niepotrzebnie tutaj jawnie inicializujesz - 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 - całe to deleteInstance dałbym tam tylko gdyby był bardzo ważny powód
- [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ęcunique_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.