サーチ…


構文

  • &<variable> - 参照によるアクセス(=変数のデータへのポインタを取得)
  • * <variable> - デフレクション演算子(=ポインタからデータオブジェクトを取得する)
  • <type> * - <type>を指すデータ型(例えば `int *)

ポインタ

Dはシステムプログラミング言語なので、手動で管理してメモリを台無しにすることができます。それにもかかわらず、Dはデフォルトでガベージコレクタを使用して未使用メモリを解放します。

DはCのようなポインタ型T *を提供します:

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);
}

@セーフD

aによって参照されるメモリがプログラム内の変数によって参照されなくなると、ガベージコレクタはメモリを解放します。

Dは@safeとマークされたコードを除いて、ポインタ演算も可能@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