Kopiering af data fra void*

Tags:    c++

Jeg har en funktion fun(void* data) som skal lave en kopi af de data, der er allokeret på adressen data. data kan være et array af tilfældige strukturer. Hvordan gør jeg det?



7 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Måske memcpy:
http://www.hmug.org/man/3/memcpy.php

Men det virker kun med POD og du skal vide hvor mange bytes data peger på.
Hvis data indeholder pointere, referencer eller containere vil det ikke virke.



Måske memcpy:
http://www.hmug.org/man/3/memcpy.php

Men det virker kun med POD og du skal vide hvor mange bytes data peger på.
Hvis data indeholder pointere, referencer eller containere vil det ikke virke.


Jeg kender størrelsen på hver struktur, samt antal elementer i arrayet. Problemet er, at det er tilfældige strukturer, dvs at der gerne optræder pointere i strukturerne.



Hallur Dalsgaard, vi har samme problem :) Jeg har en klasse med nogle pointere og vektorer. Jeg har valgt ikke at bruge memcpy, fordi jeg har læst denne artikel, http://www.icu-project.org/docs/papers/cpp_report/the_anatomy_of_the_assignment_operator.html
som siger,

"Keep in mind one thing: memcpy() is evil! It's a C construct you should never use in C++. memcpy() operates on bits and bytes, not on objects. At best, it just looks ugly and forces you to be concerned with things you shouldn't need to worry about, like the size of TBar. At worst, it fails to take into account what's actually being stored in the objects you're copying, leading to erroneous results, or even uglier code that takes the special cases into account. Never use memcpy() in C++ code. There are always better, more object-oriented ways to do the same thing."

Faktisk en meget god artikel, som forklarer det hele meget godt.



Ups. Jeg misforstod dig lidt :) Dette er jo ikke objektorienteret, men funktionsorienteret. Sorry.



Hvis er pointere i strukturerne skal du kopiere dem i hånden, dvs. et element af gangen.



Jeg takker for svarene!
Jeg kan ikke helt finde ud af dette point-system, kom vist til at give mig selv 20 point :)
Beklager til alle point-hunters



Jeg samler ikke på point.



t