Пам'ять

D є системною мовою програмування. Таким чином, D дозволяє вручну керувати пам'яттю. Проте, ручне керування пам'яттю є причиною багатьох системних помилок, тому D використовує збирач сміття за замовчуванням, щоб звільняти пам'ять, яка вже не використовується.

D забезпечує вказівні типи T*, як у мові програмування C:

int a;
int* b = &a; // b містить адресу a
auto c = &a; // c має тип int* та містить адресу a

Новий блок пам'яті у купі (heap) виділяється за допомогою оператора new, який повертає вказівник на керовану пам'ять:

int* a = new int;

Як тільки на пам'ять, яку використовує a, перестане посилатись будь-яка змінна у програмі, збирач сміття звільнить цю пам'ять.

D має три різних рівня безпеки для функцій: @system, @trusted, та @safe. За замовчуванням використовується рівень @system. @safe рівень є підмножиною D, яка запобігає помилок пам'яті архітектурно. @safe код можуть викликати тільки інші @safe чи @trusted функції. Крім того, явна арифметика вказівників заборонена у @ safe коді:

void main() @safe {
    int a = 5;
    int* p = &a;
    int* c = p + 5; // помилка
}

@trusted функції є функціями, які потрібно перевіряти вручну. Вони дозволяють організувати з'єднання між SafeD та брудним світом низького рівня.

Додатково

rdmd playground.d