D 是一门系统级编程语言,所以它允许手动内存管理。但是手动内存管理十分容易出错,所以默认情况下,D 采用 garbage collector 垃圾回收器 来管理内存。
像 C 一样,D 提供指针类型 T*
:
int a;
int* b = &a; // b 存储了 a 的地址
auto c = &a; // c 的类型为 int*,并存储了 a 的地址
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; // error
}
@trusted
函数提供了对代码安全性手动验证的能力,这为 SafeD 与肮脏的低级世界间建立起了一座桥梁。