我正在學習D,並且被我遇到的錯誤困惑。D中的基於堆棧的對象實例
考慮以下幾點:
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()
產生一個非常值得尊敬:
Hello, 32-bit world!
Elapsed time: 218 µs.
現在考慮當我嘗試到堆棧,而不是使用託管堆在初始化的PerformanceCounter會發生什麼:
//auto t = new PerformanceCounter; //From managed heap
PerformanceCounter t; //On the stack
產量:
--- killed by signal 10
我很難過。任何想法,爲什麼這個打破? (Mac OS X 10.6.4上的DMD 2.049)。 預先感謝幫助n00b。
謝謝你的線索! :)(這是有道理的,也回答了爲什麼不需要對象解引用/成員操作符( - >) – anoncow 2010-10-23 22:25:23
那麼, - >操作符不會被要求 - 例如,在C中,編譯器足夠)實際上可以警告你,你使用的是錯誤的運算符。 以類似的方式,D的指針(比如說Foo *)不需要 - >,但可以使用點:'Foo * foo =; foo.bar = 5;' – 2010-10-23 22:27:32
對不起,我指的不是動態分配的對象,而是基於堆棧的對象 – anoncow 2010-10-23 22:32:44