Avatar billede petermjensen Nybegynder
10. december 2005 - 11:18 Der er 5 kommentarer og
1 løsning

deallokering af structs i en vector

Hej Eksperter,

Hvis jeg har en struc som f.eks:

struct foo
{
    int foo[3];
    string fooBar;
};

Og jeg tilføjer min struct i en: vector<foo> vecFoo

foo strucFoo;
structFoo.foo[0] = 1
structFoo.fooBar = "bar";
vecFoo.push_back(structFoo);

Mit spørgsmål er at hvordan deallokerer jeg min vector?
Er det nok bare at bruge vector.clear()?
Avatar billede jpk Nybegynder
10. december 2005 - 11:22 #1
Ja, da du opretter struct'en på stack'en (altså uden new) er det.
Avatar billede jpk Nybegynder
10. december 2005 - 11:26 #2
Du skal dog være opmærksom på at det ikke er den mest effektive måde at gøre det på idét hele structen bliver kopieret når du kalder push_back!

Du har selvfølgelig ikke så meget indhold i structen, så det er ikke nødvendigvis et problem.

En anden mulighed er at oprette objekter af structen v.h.a new og så lade vectoren indeholde pointers istedet, så er det kun pointeren der skal kopieres.
Det betyder selvfølgelig at du skal huske at kalde delete på hvert objekt igen når du ikke længere har brug for dem.

Hvorfor bruger du egentlig struct? I C++ er struct og class faktisk det samme.
Avatar billede petermjensen Nybegynder
10. december 2005 - 11:33 #3
ahhh.. ok?
Tak for hjælpen jpk! Jeg skal vist læse noget mere mht, structs / klasser og Allokering / deallokering.

Jeg troede faktisk at structs var mindre mht hukkommelses forbrug, og at structs (eller er det unions) der blev alignet anderledes?
Avatar billede jpk Nybegynder
10. december 2005 - 11:42 #4
Det kan man vist ikke sige generelt. Hvordan allignment foregår er heller ikke fast, du kan typisk specificere det for compileren.

Ang. (de)allokering kan du bruge tommelfingerreglen:
Hvis du kalder 'new' skal du også kalde 'delete'.
Avatar billede petermjensen Nybegynder
10. december 2005 - 11:45 #5
Ok.Perfekt. Tusind tak for hjælpen!
Avatar billede jpk Nybegynder
10. december 2005 - 11:54 #6
Velbekomme.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester