Kopering af en vector

Tags:    c++

<< < 12 > >>
Hej udvikleren.dk

Jeg har denne operator=()
Fold kodeboks ind/udKode 

Den indholder ikke ret meget, det ved, men alt hvad jeg har forsøgt mig med har resulteret i en "segmentation fault" eller andet mærkeligt.
Job har en
Fold kodeboks ind/udKode 

og når man sætter jo forskellige job objekter lig hinanden fx.
Fold kodeboks ind/udKode 

Så skal der ske en kopiering af denne vector, men hvordan?
Jeg har snart prøvet alt. Jeg har prøvet med utallige forskellige for-løkker som bruger memcpy, eller en obskur form indholdende new og en masse pointere, men lige meget virker det.
Jeg ville høre om der var en som kunne give mig den lede tråd, som peger mod oplysning.





18 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Jeg ville blot lave argumentet til add som en almindelig int, og ikke en pointer til int.

Du skal selv delete det pointerne i din vektor peger på, typisk i destructoren.

Men hvis hvert element i vectoren bare er en pointer til én int, var det nok nemmere at lave vectoren om til en vector<int >



Tænkte det nok :) Men dette er bare et eksempel jeg har fundet på med nogle pointer. Pointerne i vektoren kunne lige så godt have været til et objekt af en anden art.
Men jeg skal slette alle pointerne i vektoren, i dekonstruktøren. Det forstår jeg egentlig godt. Det vil vel betyde at mit eksempel faktisk leaker rimlig meget?



Ja, hver gang du har new (eller malloc) skal du have en tilsvarende delete (eller free).
Endnu en grund til at bruge containere, de sørger selv for det besvær. Dvs. bruge en vector af vector af int i stedet for vector af pointer til int.



Dette kunne vel også være en fremragende tidspunkt til at lære at bruge auto_ptr på?



Jeg tror ikke at auto_ptr hjælper meget her.

Det er naturligvis godt at kende en auto_ptr, men pas på inden du begynder at bruge den, der er nogle faldgruber!



Lige et sidste spørgsmål. Jeg skal altså slette alt i min vektor ved at lave en delete sådan her,

Fold kodeboks ind/udKode 


?



Indlæg senest redigeret d. 16.08.2007 22:40 af Bruger #1151
Ja en auto_ptr er vel farlig da den deleter i dens deconstructor, og den kan vel blive kaldt før jeg vil have det.



Korrekt.

Vær dog opmærksom på at der findes både en "delete" og en "delete []" operator, du "skal" være sikker på at kalde den rigtige.
Med POD sker der dog normalt ikke noget ved at bruge den forkerte, der for skal i "".
auto_ptr virker ikke med arrays.

I C++ skriver man næsten altid:
for(unsigned int i=0; i < v.size(); i++)
Det virker mere logisk.



<< < 12 > >>
t