私はDでトライを書いていますが、各トライオブジェクトにデータへのポインターを持たせたいのですが、ノードがトライのターミナルノードである場合はNULL以外の値を持ち、それ以外の場合はNULLを持ちます。データのタイプは、トライが作成されるまで決定されません(Cでは、これはで実行されvoid *
ますが、テンプレートで実行する予定です)。これが、ヒープオブジェクトへのポインターが望ましい理由の1つです。
これには、最終的にヒープ上にデータを作成する必要があります。その時点で、トライノードがデータを指すことができます。実験してみるとnew
、C ++の場合と同じように、このタスクを実行しているようです。ただし、何らかの理由で、これは文字列で失敗します。次のコードが機能します。
import std.stdio;
void main() {
string *a;
string b = "hello";
a = &b;
writefln("b = %s, a = %s, *a = %s", b, a, *a);
}
/* OUTPUT:
b = hello, a = 7FFF5C60D8B0, *a = hello
*/
ただし、これは失敗します。
import std.stdio;
void main() {
string *a;
a = new string();
writefln("a = %s, *a = %s", a, *a);
}
/* COMPILER FAILS WITH:
test.d(5): Error: new can only create structs, dynamic arrays or class objects, not string's
*/
何が得られますか?ヒープ上に文字列を作成するにはどうすればよいですか?
PS Dコンパイラを書いている人がこれを読んでいる場合、「文字列」のアポストロフィは文法上の誤りです。