Zoeken…


Syntaxis

  • & <variable> - toegang via referentie (= krijgt de aanwijzer naar de gegevens van de variabele)
  • * <variable> - deference-operator (= haalt het data-object van een pointer)
  • <type> * - gegevenstype dat verwijst naar <type> (bijvoorbeeld `int *)

pointers

D is een systeemprogrammeertaal en hiermee kunt u uw geheugen handmatig beheren en verknoeien. Desondanks gebruikt D standaard een vuilnisman om ongebruikt geheugen vrij te maken.

D biedt pointer types T * zoals in 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);
}

Toewijzen op de hoop

Een nieuw geheugenblok op de heap wordt toegewezen met behulp van de new uitdrukking, die een pointer naar het beheerde geheugen retourneert:

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

@safe D

Zodra het geheugen waarnaar wordt verwezen door a niet meer wordt verwezen via een variabele in het programma, zal de vuilnisman zijn geheugen vrijmaken.

D staat ook pointerberekening toe, behalve in code die is gemarkeerd als @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();
}

Zie het artikel van het D-ontwerpteam voor meer informatie over SafeD.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow