Estoy aprendiendo D, y estoy confundido por un error que estoy recibiendo.Creación de instancias de objetos basados en pila en D
considerar lo siguiente:
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()
produce una perfectamente respetable:
Hello, 32-bit world!
Elapsed time: 218 µs.
Ahora considere lo que sucede cuando intento inicializar PerformanceCounter en la pila en lugar de utilizar el montón administrado:
//auto t = new PerformanceCounter; //From managed heap
PerformanceCounter t; //On the stack
Rendimientos:
--- killed by signal 10
Estoy perplejo. ¿Alguna idea de por qué se rompe esto? (DMD 2.049 en Mac OS X 10.6.4). Gracias de antemano por ayudar a n00b.
¡Gracias por la pista! :) (Eso tiene sentido y también responde por qué no se requiere la desreferencia/operador miembro del objeto (->) – anoncow
Bueno, el operador -> no sería necesario de todos modos, por ejemplo, en C, el compilador (si es inteligente) suficiente) realmente puede advertirle que está utilizando el operador incorrecto. De manera similar, los indicadores de D's (por ejemplo, Foo *) no necesitan ->, pero funcionan con el punto: 'Foo * foo =; foo.bar = 5; ' –
Lo siento, me refiero a que no lo necesita para el objeto dinámicamente asignado, no el basado en la pila. – anoncow