Program ścina się przy wyłączaniu (problem z vector)
Ostatnio zmodyfikowano 2012-10-27 14:20
crash |
» 2012-10-27 00:44:45 DejaVu haha ;p
Własnoręcznie napisane destruktory obiektów wpychanych do wektora, spowalniają. Jeśli to możliwe tzn. zadanie Ci tego nie każe, to nie pisz własnych destruktorów. Inna sprawa, new i delete to 'nakładki' na malloc/free, co za tym idzie, więcej rozkazów dla procesora przy każdej iteracji ;> |
|
DejaVu |
» 2012-10-27 01:05:42 @up: chyba mnie źle zrozumiałeś... kontenery STL muszą jawnie wywoływać destruktory obiektów (w szczególności std::vector). To nie dzieje się 'automatycznie'. Popatrz sobie na implementację std::allocator. |
|
crash |
» 2012-10-27 01:36:40 Właśnie nie bardzo to widzę, przyznam szczerze. Załóżmy taki kod: #include <iostream>
int global_dstr_cnt;
class EmptyClass { public: EmptyClass() { } ~EmptyClass() { global_dstr_cnt++; } };
int main() { vector < EmptyClass * > v; for( int i = 0; i < 100; ++i ) { EmptyClass * E = new EmptyClass; v.push_back( E ); } ...
Gdyby usuwanie stworzonych elementów było dynamiczne, to polecenie: v.clear(); cout << global_dstr_cnt; ...
by wywołało automatycznie destruktory, a tak nie jest, do tego trzeba używać iteratora, z którego pobiera się element, następnie operator delete. Czegoś nie do końca kumam. ps: przeczytam rano ;p |
|
DejaVu |
» 2012-10-27 01:52:34 No bo Ty robisz N-alokacji pamięci, a potem N-dealokacji pamięci (pomijając, że kilka alokacji jeszcze w samym vectorze zajdzie przy takim kodzie jaki podałeś).
PS. czy ja gdziekolwiek pisałem o dynamicznym tworzeniu obiektów? |
|
crash |
» 2012-10-27 14:20:44 Nie, nie, to ja się chciałem dowiedzieć o co Ci kaman |
|
1 « 2 » |