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?)
    }
}
.

È stato utile?

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
scroll top