Buscar..


Sintaxis

  • & <variable> - acceso por referencia (= lleva el puntero a los datos de la variable)
  • * <variable> - operador de deferencia (= obtiene el objeto de datos de un puntero)
  • <tipo> * - tipo de datos que apunta a <tipo> (por ejemplo, `int *)

Punteros

D es un lenguaje de programación del sistema y, por lo tanto, le permite administrar y desordenar manualmente su memoria. Sin embargo, D utiliza un recolector de basura por defecto para liberar memoria no utilizada.

D proporciona tipos de punteros T * como en 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);
}

Asignación en el montón

Un nuevo bloque de memoria en el montón se asigna usando la new expresión, que devuelve un puntero a la memoria administrada:

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

@safe D

Tan pronto como la memoria a la que hace referencia no esté referenciada por ninguna otra variable en el programa, el recolector de basura liberará su memoria.

D también permite la aritmética de punteros, excepto en el código que está marcado como @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();
}

Para obtener más información sobre SafeD, consulte el artículo del equipo de diseño de D.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow