Avatar billede ostehamster Nybegynder
04. oktober 2005 - 16:31 Der er 9 kommentarer og
1 løsning

delete void*

Hejsa

Kan det passe, at man ikke kan slette en void*?

void* ptr = enelletandenfunk();
delete ptr;

Det vil den ikke, compileren siger "deleting `void*' is undefined"

mvh
Christoffer
Avatar billede arne_v Ekspert
04. oktober 2005 - 16:45 #1
det lyder vel rimeligt

void * = pointer til hvad som helst

hvordan skal den vide hvor hvad den skal gøre

GCC accepterer ikke syntaxen

BCB og VC++ gør

men jeg antagr at GCC har ret og C++ standarden ikke tilader det

og jeg ville være meget forsigtig med at lade BCB og VC++ gøre det da
destructor næppe bliver kaldt
Avatar billede ostehamster Nybegynder
04. oktober 2005 - 17:13 #2
Det kan der være noget om.

Det ville være umuligt at vide hvilken deconstructor der skal kaldes osv.

Takker for svaret :)

Et svar?
Avatar billede arne_v Ekspert
04. oktober 2005 - 17:38 #3
kommer her
Avatar billede bertelbrander Novice
04. oktober 2005 - 22:47 #4
Man skal altid delete (eller delete []) den samme type som man har new'et (eller new[]'et), eller en base class for denne.

Man kan ikke new'e en void *, der er ingen typer der arver fra void * -> man kan ikke delete en void *
Avatar billede ostehamster Nybegynder
06. oktober 2005 - 01:26 #5
Bare lige for at være helt sikker, men kan heller ikke lave en bit-vise kopiering af en void* vel? Jeg mener, hvorfra skulle compileren vide hvor meget objektet fylder?
Avatar billede bertelbrander Novice
06. oktober 2005 - 01:52 #6
Jeg er ikke sikker på at jeg forstå hvad du mener med "bit-vise kopiering".

Man kan godt kopiere med memcpy, men det er en c-funktion der ikke kender størrelse på objecter. Men man kan ikke bruge std::copy

Indholdet af en void * (som måske er en void) har ikke nogen størrelse. Så man kan ikke bruge:
void *p = Something();
p += 12;
(Selvom GCC godt kan overtales til at acceptere det.)
Avatar billede ostehamster Nybegynder
06. oktober 2005 - 02:25 #7
Ok

Det er bare fordi jeg er ved at linked liste, som indeholde void*, for at den skal kunne bruges til alt. Jeg ville så gerne lave en operator=, så jeg kunne tage en kopi, men jeg kan ikke kopiere void*'erne.

Men det er vel ikke så mærkeligt, når den ikke kunder typen.
Avatar billede ostehamster Nybegynder
06. oktober 2005 - 02:25 #8
bit-vise, men jeg tage en eksakt kopi.
Avatar billede ostehamster Nybegynder
06. oktober 2005 - 02:29 #9
Ok, jeg kan så også se at jeg er ved at være ret træt :)

Jeg er ved at lave en linked liste, og med bit-vise mener jeg at tage en eksakt kopie.
Avatar billede bertelbrander Novice
06. oktober 2005 - 19:43 #10
Du er nød til at kende størrelsen (i bytes) på det du vil kopiere. Kender du den kan du bruge memcpy.

Men er en af ideerne med linkede lister ikke at man ikke skal kopiere?
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