¿Se copiarán los objetos en la tarea en D?
-
21-12-2019 - |
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?)
}
}
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