Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program ścina się przy wyłączaniu (problem z vector)

Ostatnio zmodyfikowano 2012-10-27 14:20
Autor Wiadomość
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 ;>
P-67623
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.
P-67624
crash
» 2012-10-27 01:36:40
Właśnie nie bardzo to widzę, przyznam szczerze. Załóżmy taki kod:

C/C++
#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:

C/C++
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
P-67626
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?
P-67629
crash
» 2012-10-27 14:20:44
Nie, nie, to ja się chciałem dowiedzieć o co Ci kaman
P-67647
1 « 2 »
Poprzednia strona Strona 2 z 2