Ich lerne D, und bin verwirrt durch einen Fehler, den ich bekomme.Stack-basierte Objekt Instanziierung in D
Beachten Sie Folgendes:
module helloworld;
import std.stdio;
import std.perf;
ptrdiff_t main(string[] args)
{
auto t = new PerformanceCounter; //From managed heap
//PerformanceCounter t; //On the stack
t.start();
writeln("Hello, ", size_t.sizeof * 8, "-bit world!");
t.stop();
writeln("Elapsed time: ", t.microseconds, " \xb5s.");
return 0;
} //main()
ergibt sich eine durchaus beachtliche:
Hello, 32-bit world!
Elapsed time: 218 µs.
Betrachten wir nun, was passiert, wenn ich versuche, Performance auf dem Stapel zu initialisieren, anstatt den verwalteten Heap verwenden:
//auto t = new PerformanceCounter; //From managed heap
PerformanceCounter t; //On the stack
Ausbeuten:
--- killed by signal 10
Ich bin ratlos. Irgendwelche Gedanken darüber, warum das bricht? (DMD 2.049 unter Mac OS X 10.6.4). Vielen Dank im Voraus für die Unterstützung eines n00b.
Vielen Dank für den Hinweis !! :) (Das macht Sinn und beantwortet auch, warum das Objekt dereference/member operator (->) nicht benötigt wird. – anoncow
Nun, der Operator -> wäre sowieso nicht erforderlich - zum Beispiel in C, der Compiler (wenn smart genug) kann Sie eigentlich warnen, dass Sie den falschen Operator verwenden In ähnlicher Weise brauchen D's Zeiger (sagen wir, Foo *) nicht ->, sondern arbeiten mit dem Punkt: 'Foo * foo =; foo.bar = 5; ' –
Entschuldigung, ich meinte, dass ich es nicht für das dynamisch zugewiesene Objekt benötige, nicht für das stackbasierte. – anoncow