Błąd #95
Usunąć metodę i obsługę ecp_stop_accepted_handler()
0%
Opis
Ta metoda to barok. Korzysta z niej tylko robot Neuronowy i jest to jakieś dziwne obejście, ale nie wiem czego...
Braku destruktora? Niespodziewanego scenariusza z ECP_STOP?
Historia
#1 Uaktualnione przez Tomek Winiarski ponad 13 lat temu
- Zmieniono Status z Nowy na Zamknięty
desktruktor nie jest odpalany w tamtej obsludze wyjatku, zwroc uwage ze jestemy w petli for procesu ecp. Moim zdaniem rozwiazanie jest ok.
#2 Uaktualnione przez Tomek Winiarski ponad 13 lat temu
- Zmieniono Status z Zamknięty na Odrzucony
#3 Uaktualnione przez Anonimowy ponad 13 lat temu
- Zmieniono Status z Odrzucony na W Toku
Zwróć uwagę, że nawet jedyny użytkownik tego tworu (autor?) nie wie jak z niego korzystać...
Tam gdzie jest tworzony obiektneuronSensor
jest też tworzony obiekt neuronGenerator
. Teraz powiedz mi:
- czemu pierwszy musi być usuwany w
ecp_stop_accepted_handler
a drugi już nie? - ewidentnie pod wskaźnik związany z generatorem jest przypisywanych wiele obiektów, a kasowany tylko jeden ostatni - w destruktorze? Wyciek.
- przy rzuceniu wyjątku i zakończeniu działania ECP obiekt
neuronGenerator
zostanie usunięty (w odpaleniu destruktora~Neuron()
), aneuronSensor
już nie (bo nie każdy wyjątek powoduje odpaleniaecp_stop_accepted_handler
).
Jest to ewidentna inkarnacja problemu metod initialize
zastępujących konstruktory oraz innych dziwnych tworów, które w założeniu mają zastępować destruktory a tego wcale nie robią. Wprowadzanie takich rzeczy prowadzi prosto do wycieków, co pokazałem powyżej.
Jeżeli do przepływu sterowania wykorzystuje się mechanizm wyjątków (jak w przypadku obsługi ECP), to należy to robić konsekwentnie.
Obecne rozwiązanie nie jest zatem OK i należy je zastąpić wprowadzeniem obiektu, którego czas życia będzie związany ze stanami procesu ECP, w szczególności obsługą STOP-u.
#4 Uaktualnione przez Tomek Winiarski ponad 10 lat temu
- Zmieniono Status z W Toku na Odrzucony