Gli oggetti saranno copiati in assegnazione in D?
-
21-12-2019 - |
Domanda
Quando assegnando un oggetto in D, sarà copiato?
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?)
}
}
. Soluzione
Solo il riferimento viene copiato, l'oggetto stesso non è duplicato.Puoi esplicitamente duplicare l'oggetto utilizzando .dup
però.
Altri suggerimenti
Le classi sono tipi di riferimento, quindi quando hai
Object o;
.
o
è un riferimento a un Object
anziché a un Object
attuale, quindi copialo copia solo il riferimento.È proprio come con i puntatori.
auto a = new int;
*a = 5;
auto b = a;
assert(a is b);
assert(*a == *b);
*b = 5;
assert(*a == 5);
.
Avrei consiglierei a leggere Il linguaggio di programmazione D di Andrei Alexandrescu,o Ali Çehreli's D Programmazione del tutorial del linguaggio .In particolare, Questo capitolo del libro di Ali discute le lezioni, incluso come assegnare ecopiali.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow