Поиск…


Синтаксис

  • & <variable> - доступ по ссылке (= получает указатель на данные переменной)
  • * <variable> - оператор deference (= получает объект данных из указателя)
  • <тип> * - тип данных, указывающий на <тип> (например, `int *)

указатели

D - это системный язык программирования и, таким образом, позволяет вручную управлять и испортить память. Тем не менее, D использует сборщик мусора по умолчанию для освобождения неиспользуемой памяти.

D предоставляет типы указателей T *, как в 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);
}

Выделение на кучу

Новый блок памяти в куче выделяется с использованием new выражения, которое возвращает указатель на управляемую память:

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

@safe D

Как только память, на которую ссылается a, больше не ссылается ни на какую переменную в программе, сборщик мусора освободит свою память.

D также разрешает арифметику указателя, за исключением кода, отмеченного как @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();
}

Для получения дополнительной информации о SafeD см. Статью из команды разработчиков D.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow