D Language
Geheugen & Aanwijzers
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