Frage

Wenn ich ein Objekt in D zuweise, wird es kopiert?

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?)
    }
}
War es hilfreich?

Lösung

Es wird nur die Referenz kopiert, das Objekt selbst wird nicht dupliziert.Sie können das Objekt explizit duplizieren, indem Sie verwenden .dup obwohl.

Andere Tipps

Klassen sind Referenztypen, also wenn ja

Object o;

o ist ein Verweis auf eine Object eher als eine tatsächliche Object, also wird beim Kopieren nur die Referenz kopiert.Es ist genau wie mit Zeigern.

auto a = new int;
*a = 5;

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

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

Ich würde auch zur Lektüre raten Die Programmiersprache D von Andrei Alexandrescu oder Ali Çehrelis Tutorial zur Programmiersprache D.Insbesondere, dieses Kapitel In Alis Buch geht es um Klassen, einschließlich deren Zuweisung und Kopieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top