D doesn't allow pointer arithmetic in @safe code. At first it seems like that cannot work, but it works very well. Pointer arithmetic is relegated to functions that are @system.
The reason it works is because D has actual array types.
If you choose to use automatic memory management with D, you are memory safe.