Zwalnianie pamięci
Ostatnio zmodyfikowano 2010-04-23 00:06
dmx81 Temat założony przez niniejszego użytkownika |
Zwalnianie pamięci » 2010-04-22 21:09:06 witam. mam wektor na wskazniki do swojej klasy std::vector<class*> wektor, po nacisnieciu spacji if( key[ KEY_SPACE ] ) class * nowy = new class( x, y )
laduje do nowego obiektu bitmape, ustalam jakies wartosci itd, wrzucam do wektora przez push_back, a po spelnieniu okreslonego warunku usuwam przez delete wektor[ i ]
wektor.erase[ tab.begin() + i ]
, czy to wystarczy na posprzatanie obiektu? czy musze jeszcze dodatkowo usunac bitmape? |
|
WunM |
» 2010-04-22 21:44:13 Stwórz sobie klasę: class AAA { public: AAA() { std::cout << "constructor" << std::endl; } ~AAA() { std::cout << "destructor" << std::endl; } }; I porównaj to: AAA * aaa = new AAA;
std::vector < AAA > bbb; bbb.push_back( * aaa );
z tym: AAA * aaa = new AAA;
std::vector < AAA *> bbb; bbb.push_back( aaa );
Wnioski wyciągnij sam. Aha i znajdź memleaka. |
|
dmx81 Temat założony przez niniejszego użytkownika |
» 2010-04-23 00:06:34 std::vector < C_poziom1 > vTablicaObiektow; C_poziom1 cPodloga; cPodloga.i_x = 10; cPodloga.i_y = 10;
vTablicaObiektow.push_back( cPodloga );
std::vector < C_poziom1 *> vTablicaWskaznikow; C_poziom1 * cPodloga = new C_poziom1; cPodloga->i_x = 10; cPodloga->i_y = 10;
vTablicaWskaznikow.push_back( cPodloga );
taki dostalem wzor na tym forum, na obiekty i na wskazniki. co do twojej podpowiedzi, przypadek pierwszy - wywolywany jest konstruktor i destruktor, nie wiem dlaczego 2 x wiecej destruktorow niz konstuktorow i czemu nie kolejno (kon, kon, des, kon, des, des, des, des - cos takiego, new po wcisnieciu spacji) drugi przypadek, tylko konstruktor - nie uzywam w zadnym z tych przypadkow delete ani nic takiego, bede teraz dalej analizowal co i jak a do tej pory to ja to rozumiem jako: class * wskaznik = new class; std::vector < class *> wektor_wskaznikow;
wektor_wskaznikow.push_back( wskaznik );
delete wektor_wskaznikow[ n ]; wektor_wskaznikow.erase( wektor_wskaznikow.begin() + n )
nie wiem czy robie cos zle? wydaje mi sie, ze robie dobrze, bo jesli dam tylko delete, to przy probie odwolania sie do tego elementu w wektorze, program mi sie wysypuje, czyli raczej usuniety ten obiekt no nie? no to pozniej tylko usuwam "pusty" wskaznik z wektora i chyba czysto? |
|
« 1 » |