D Language
Память и указатели
Поиск…
Синтаксис
- & <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