Dlaczego należy pamiętać o niszczeniu obiektów?

0

Może mi ktoś wytłumaczyć dlaczego należy pamiętać o zniszczeniu obiektu przed zakończeniem działania programu (lub kiedy nie jest nam już potrzebny)? Coś takiego mam napisane np. na stronie http://pl.wikibooks.org/wiki/C++/Czym_jest_obiekt
Stanie się coś, jeżeli nie usunie się obiektu? Jakieś błędy?

1

Tak jest bardziej elegancko :P
Ogólnie jest to bardzo istotne jeśli masz program który działa bardzo bardzo długo, bo może się nagle okazać że nic nie zwalniasz i ci z niego "cieknie", tzn program zjada coraz wiecej pamieci.

2

Gdy program się kończy, cała zaalokowana pamięć jest uwalniana -
zwalnianie po sobie pamięci ZAWSZE to po prostu dobry nawyk :)

3

<rafal__> na przykład kibel o nazwie Java ma automatyczny mechanizm spłukiwania. natomiast kibel o nazwie C++ takie ficzera nie ma. znany i szanowany projektant kibli Bjarne S. postanowił dać srającemu wolność, kiedy chce się pozbyć swojej kupy. natomiast zwykle każda nowoczesna ubikacja typu OS ma zatrudnioną babcię klozetową, która po każdym kliencie sprawdza, czy jest na tyle dobrze wychowany, że spuścił po sobie wodę.

http://ludzie.4programmers.net/bash/?25

2

W Javie Nic się nie stanie ponieważ masz Garbage Collector ( czy jakoś tak :P) on automatycznie Niszczy ci bezużyteczne obiekty. W C++ Należy niszczyć obiekty ponieważ c++ nie posiada takiego mechanizmu, przy małych programach to jest praktycznie Niepotrzebne ponieważ nie masz szans zawalić nim pamięci, za to przy większych programach zawalił byś pamięć w 10 min. przez co program mógłby przestać Ci działać, spowolnić albo bóg wie jeszcze co :P a taki mały przykład mało poważny, jak będziesz kiedyś robił Drzewo Binarne i będziesz miał w nim jakąś metodę usuwanie elementu, to przy ustawieniu wszelakich wskaźników na, Rodzica, lewego syna i prawego oraz wartości, na NULL, twój program już nie wykryje takiego Węzła, Ale on dalej będzie w pamięci (jeżeli oczywiście zapomniałeś o niszczeniu obiektu) i robiąc takich operacji miliony twój program po prostu przestanie działać :) a taki bardziej życiowy przykład to wyobraź sobie że w markecie na kasie musieli by resetować całe oprogramowanie co 10 min ponieważ cokolwiek tam zarządza zapchało by sobie pamięć :)

0

Przede wszystkim, jeżeli kiedykolwiek twój program miałby być przerobiony na bibliotekę lub podprogram w bardziej złożonym programie, to wtedy zwalnianie pamięci mogłoby być kluczowe.

better safe than sorry

1

Stanie się coś, jeżeli nie usunie się obiektu? Jakieś błędy?

W przypadku buforowanego strumienia plikowego wyjściowego może dojść do sytuacji, że zalegające dane w buforze nie zostaną zapisane w pliku (bufory są flushowane przy niszczeniu strumienia). Obiekty synchronizacyjne (globalne) także powinny być usuwane w sposób jawny.

Generalnie zwalniać wszystko, co powinno być zwolnione, tym bardziej że w C++ dość łatwo ogarnąć zarządzanie pamięcią (inteligentne wskaźniki, vector itp.).

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