Pregunta

Cuando asigno un objeto en D, ¿se copiará?

void main() {
    auto test = new Test(new Object());
    tset.obj;
}

class Test {
    public Object obj;

    public this(Object ref origObj) {
        obj = origObj; // Will this copy origObj into obj, or will origObj and obj point to the same data? (Is this a valid way to pass ownership without copying the object?)
    }
}
¿Fue útil?

Solución

Solo se copia la referencia, el objeto en sí no se duplica.Sin embargo, puede duplicar explícitamente el objeto utilizando .dup, aunque.

Otros consejos

Las clases son tipos de referencia, por lo que cuando tienes

Object o;

o es una referencia a un Object en lugar de un real Object, por lo que copiarlo solo copia la referencia.Es como con los punteros.

auto a = new int;
*a = 5;

auto b = a;
assert(a is b);
assert(*a == *b);

*b = 5;
assert(*a == 5);

Yo recomendaría leer cualquiera de los dos El lenguaje de programación D de Andrei Alexandrescu, o de Ali Çehreli Tutorial del lenguaje de programación D.En particular, Este capítulo del libro de Ali analiza las clases, incluido cómo asignarlas y copiarlas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top