Jaklub Opublikowano 28 Września 2010 Udostępnij Opublikowano 28 Września 2010 EDIT: sory, zamiast odpowiedzi dalem edit wybacz jaklub :D ciapciak psyś ;p zamiast: jakasklasa obj[128]; daj: jakasklasa* obj[128]; bo w metodzie stworzenie masz new a new zwraca wskaznik - new to c++owa ulepszona malloc a tu: void poteznaklasa::stworzenie() { int i; for(i=0; i<128; i++) { // bylo 64 a tablicama 128 elementow przeciez obj[i]=new jakasklasa; } } no i lepiej trzymaj to w kontenerze typu vector / lista jaklub: ejj zedytowałeś mojego posta ;p gwiazdki zapomniałem wstawić do posta, w kodzie była i dlatego wszystko się kompilowało. głównie chcę się dowiedzieć, czy dobrze usuwam to wszystko z pamięci. pętla była do 64 na zasadzie "bo tak", w moim tworze nie wszystkie elementy tablicy mają być zapełnione (ma być "elastyczny") Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
PsichiX Opublikowano 28 Września 2010 Udostępnij Opublikowano 28 Września 2010 sorki jaklub, omylkowo dalem edit zamiast odpowiedzi ;p btw. daj kod z usuwaniem Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 28 Września 2010 Udostępnij Opublikowano 28 Września 2010 Dla pewności trzymaj obiekty w vectorze bądź usuwaj je swoim sposobem: for( int n = 0; n < 64; n++ ) delete obj[n]; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 28 Września 2010 Autor Udostępnij Opublikowano 28 Września 2010 przypomnę kod: class jakasklasa { // jakies dane }; class poteznaklasa { private: jakasklasa *obj[128]; public: void stworzenie(); void koniec(); }; poteznaklasa instancja; void poteznaklasa::stworzenie() { int i; for(i=0; i<64; i++) { // wiem, ze moze byc 128 obj[i]=new jakasklasa; } } void poteznaklasa::koniec() { int i; for(i=63; i>=0; i--) { delete obj[i]; } } goal: chcę wiedzieć, czy dobrze dodaję i usuwam z pamięci obiekty przepisane z pamięci, mogą być byki. vector zostanie użyty gdzie indziej dzięki za dotychczasową pomoc =p edit: poprawki Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 28 Września 2010 Udostępnij Opublikowano 28 Września 2010 Ewentualnie możesz pobawić się przeładowaniem operatora delete Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Will Opublikowano 28 Września 2010 Udostępnij Opublikowano 28 Września 2010 Ewentualnie możesz pobawić się przeładowaniem operatora delete po co? Dla dodatkowego spr pointera? goal: chcę wiedzieć, czy dobrze dodaję i usuwam z pamięci obiekty przepisane z pamięci, mogą być byki. vector zostanie użyty gdzie indziej Teoretycznie tak. Powinieneś jednak : A) Zerować cała tablice w konstruktorze. B ) Zwalniać pamięć ze sterty w destruktorze czyli: class Test { public: Test() { for(int i=0;i<128;i++) { m_array[i]=NULL; } } ~Test() { for(int i=0;i<128;i++) { if(m_array[i]!=NULL)//edit: byl blad zabraklo spr odp elementu delete m_array[i]; } } void init() { for(int i=0;i<64;i++) { m_array[i]=new jakasklasa(); } } private: jakasklasa* m_array[128]; }; Dzięki temu unikniesz głupich leaków i przy usuwanie Test: Test * t=new Test(); t->init(); delete t; t=NULL; nawet jeśli zapomnisz o init all będzie ok. Jeśli będziesz tworzyć obiekt Test na stosie też będzie ok po wyjściu z range'a destruktor sam usunie co trzeba. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Konrad-GM Opublikowano 29 Września 2010 Udostępnij Opublikowano 29 Września 2010 A ja tak dodam... Przy usuwaniu zerowego obiektu ( "int *obj = 0;" ) nie trzeba sprawdzać czy jest tam zero, ponieważ operator delete automatycznie odrzuci prośbę usuwania jeśli wskaźnik wskazuje na zero. :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 29 Września 2010 Autor Udostępnij Opublikowano 29 Września 2010 Will, dzięki za wskazówkę. dopiszę konstruktor, który ustawi te wskaźniki na null Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się