Destruktor klasy a tablica dynamiczna

0

Mam w klasie tablice dynamiczną i pytanie: czy w destruktorze klasy muszę ją usuwać?
Pytam bo owa klasa jest niszczona z zamknięciem programu i czy OS nie zwolni pamięci z tej tablicy sam.
Na wikipedii ( http://pl.wikipedia.org/wiki/Destruktor#Destruktor_a_wyciek_pami.C4.99ci ) przeczytałem, że: niezwalnianie tablicy w destruktorze "... spowoduje, że zostanie zwolniona pamięć przeznaczona obiekt w którym jest między innymi wskaźnik liczba, ale nie zostanie zwolniona pamięć na którą wskazuje liczba, gdyż zmienna ta jest oddzielnym elementem pamięci."

Pytam bo kto pyta nie błądzi.

1
kacper546 napisał(a)

Mam w klasie tablice dynamiczną i pytanie: czy w destruktorze klasy muszę ją usuwać?

Tak. A najlepiej używaj RAII i nawet nie będziesz musiał pamiętać o wstawianiu delete w kodzie.

kacper546 napisał(a)

Pytam bo kto pyta nie błądzi.

Kto pyta, ten błądzi wraz z innymi ;).

4

Tak. Do tego musisz jeszcze poprawnie obsługiwać kopiowanie i przenoszenie Twojej klasy, inaczej po dokonaniu kopii spróbujesz zwolnić tę samą pamięć dwa razy. Stąd powstała reguła trzech (rule of three: http://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29 ), w C++11 uzupełniona o przenoszenie do reguły pięciu. Ale tak naprawdę bardzo mało prawdopodobne jest, abyś faktycznie miał zapotrzebowanie na pisanie wszystkich tych funkcji, więc staraj się stosować do http://flamingdangerzone.com/cxx11/2012/08/15/rule-of-zero.html

W Twoim przypadku oznaczałoby to użycie std::vector<T> lub std::unique_ptr<T[]>/std::shared_ptr<T[]> zamiast T* w Twojej klasie. Zdecydowanie polecam, używanie nagiego new i delete to praktycznie antyidiom w C++.

1 użytkowników online, w tym zalogowanych: 0, gości: 1