• 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?

0 głosów
383 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 Mentor (354,880 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,570 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 1,716 wizyt
pytanie zadane 15 lipca 2015 w Nasze projekty przez makoso Mądrala (7,380 p.)
0 głosów
3 odpowiedzi 2,362 wizyt
0 głosów
1 odpowiedź 503 wizyt

93,720 zapytań

142,648 odpowiedzi

323,266 komentarzy

63,270 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...