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

- Rejestracja:ponad 10 lat
- Ostatnio:prawie 4 lata
- Postów:146
0
edytowany 1x, ostatnio: Craith

Prav
https://4programmers.net/C/Artyku%C5%82y/Generyczny_singleton_w_C++

Craith
Tak widziałem, chciałem napisać oo swojemu

- Rejestracja:ponad 17 lat
- Ostatnio:mniej niż minuta
2
Już samo hasło "Singleton" jest dla mnie synonimem "crap code".
Po co dziedziczenie?
edytowany 1x, ostatnio: MarekR22

Chciałem napisać w taki sposób, wydawało mi się to ciekawe
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.

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.
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ą.

- Rejestracja:ponad 11 lat
- Ostatnio:prawie 2 lata
- Postów:607
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.