• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++] Czy klasa ma być odpowiedzialna, za błędny input do niej przekazany?

Object Storage Arubacloud
0 głosów
192 wizyt
pytanie zadane 23 stycznia 2019 w C i C++ przez Hiskiel Pasjonat (22,830 p.)

Cześć.

Mam prostą klasę:

class min_max_pos_int{
    public:
        int* min_pos;
        int* max_pos;
        min_max_pos_int(int* min_, int* max_) : min_pos(min_), max_pos(max_) {}
        ~min_max_pos_int(){
            delete min_pos;
            delete max_pos;
        }
};

Kompilator pokazał mi dwa warningi - min_pos i max_pos w initalizer list mogą być niezainicjowane.. I pomyślałem, że racja, może zostać przesłany nullptr (jeśli o to chodziło ofc). Ale czy klasa musi być za to odpowiedzialna? Czy programowanie przy których WSZĘDZIE dajemy zabezpieczenia nie nazywa się programowaniem agentowym?

 

Dziękuję z góry i pozdrawiam.

1
komentarz 23 stycznia 2019 przez adrian17 Ekspert (344,860 p.)
edycja 24 stycznia 2019 przez adrian17

Kompilator pokazał mi dwa warningi - min_pos i max_pos w initalizer list mogą być niezainicjowane

Pokaż proszę dokładną treść warninga i miejsce w którym się pokazało.

Bo na oko, ostrzeżenie kompilatora nie ma tutaj sensu (choć sam kod jest brzydki, jak inni napisali) - pewnie masz problem gdzie indziej.

Nie, nullptr nie oznacza "niezainicjalizowany".

komentarz 25 stycznia 2019 przez Hiskiel Pasjonat (22,830 p.)
Przepraszam, że zignorowałem Twój komentarz.. Niektóre powiadomienia omijam, na niektóre tylko spojrzę i zostawiam do ogarnięcia na później, a potem o nich zapominam.

2 odpowiedzi

+2 głosów
odpowiedź 24 stycznia 2019 przez Szfierzak Gaduła (3,750 p.)
wybrane 24 stycznia 2019 przez Hiskiel
 
Najlepsza
W przypadku mniejszych np. akademickich projektów, masz w sumie dowolność. Rzadko zdarzało mi się, żeby na uczelni była oceniana jakość kodu. Póki piszesz sam, możesz nie przejmować się powyższym warningiem, jednak zastanów się, co będzie jeżeli ktoś usunie obiekt klasy, którą przedstawiłeś? Zwalniasz w destruktorze pamięć, której nie za alokowałeś w tej klasie. To dość niebezpieczne. Co będzie jak będziesz chciał korzystać z wartości na które wskazują min i max, po wywołaniu delete obiekt_min_max_pos_int??

Programując w grupie już łatwo popełnić błąd jaki opisałem. Uważam, że dobrą praktyką jest robienie głębokiej kopii jeżeli to możliwe i/lub nie zwalnianie pamięci w klasie, w której jej nie za alokowaliśmy.
+2 głosów
odpowiedź 23 stycznia 2019 przez criss Mędrzec (172,590 p.)

To tylko warning, robisz z tym co chcesz. Chociaż zakładanie z góry, że min_ i max_ wskazują na pamięć zaalokowaną przez new nie jest najpiękniejsze.

Programowanie gdzie WSZĘDZIE dajemy zabezpieczenia nazywa się idiot-proof :D Moim skromnym zdaniem, najlepiej pisać tak żeby było wydajnie (ale niekoniecznie bezpiecznie niezależnie od wszystkiego) i potem dokumentować co user może z funkcją/klasą a czego nie.

Podobne pytania

0 głosów
4 odpowiedzi 752 wizyt
pytanie zadane 15 lipca 2015 w Nasze projekty przez makoso Mądrala (7,380 p.)
0 głosów
3 odpowiedzi 1,725 wizyt
0 głosów
1 odpowiedź 386 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...