Ricerca…


Sintassi

  • & <variabile> - accesso per riferimento (= ottiene il puntatore ai dati della variabile)
  • * <variabile> - operatore deferenza (= ottiene l'oggetto dati da un puntatore)
  • <tipo> * - tipo di dati che punta a <tipo> (es. `int *)

puntatori

D è un linguaggio di programmazione del sistema e consente quindi di gestire e confondere manualmente la memoria. Tuttavia, D utilizza un garbage collector per impostazione predefinita per liberare memoria non utilizzata.

D fornisce i tipi di puntatore T * come 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);
}

Allocando sul mucchio

Un nuovo blocco di memoria sull'heap viene allocato utilizzando la new espressione, che restituisce un puntatore alla memoria gestita:

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

@safe D

Non appena la memoria referenziata da a non viene più referenziata attraverso alcuna variabile nel programma, il garbage collector ne libera la memoria.

D consente inoltre l'aritmetica del puntatore, tranne nel codice contrassegnato come @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();
}

Per ulteriori informazioni su SafeD, consultare l' articolo del team di progettazione D.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow