我正在学习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