Sök…


Syntax

  • & <variabel> - åtkomst genom referens (= får pekaren till variabelns data)
  • * <variabel> - störningsoperatör (= hämtar dataobjektet från en pekare)
  • <typ> * - datatyp som pekar på <typ> (t.ex. `int *)

pekare

D är ett systemprogrammeringsspråk och därmed kan du manuellt hantera och rota ditt minne. Ändå använder D en sopor som standard för att frigöra oanvänt minne.

D ger pekartyperna T * som i C:

void main()
{
    int a;
    int* b = &a; // b contains address of a
    auto c = &a; // c is int* and contains address of a

    import std.stdio : writeln;
    writeln("a ", a);
    writeln("b ", b);
    writeln("c ", c);
}

Tilldelar på högen

Ett nytt minnesblock på högen allokeras med det new uttrycket, som returnerar en pekare till det hanterade minnet:

void main()
{
    int* a = new int;
    *a = 42; // dereferencing
    import std.stdio : writeln;
    writeln("a: ", *a);
}

@safe D

Så fort minnet som refereras av a inte längre hänvisas till via någon variabel i programmet kommer soporna att frigöra sitt minne.

D tillåter också pekarearmetik, utom i kod som är markerad som @safe .

void safeFun() @safe
{
    writeln("Hello World");
    // allocating memory with the GC is safe too
    int* p = new int;
}

void unsafeFun()
{
    int* p = new int;
    int* fiddling = p + 5;
}

void main()
{
    safeFun();
    unsafeFun();
}

För mer information om SafeD se artikeln från D-designteamet.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow