Question

Lorsque j’attribue un objet en D, sera-t-il copié ?

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?)
    }
}
Était-ce utile?

La solution

Seule la référence est copiée, l'objet lui-même n'est pas dupliqué.Vous pouvez explicitement dupliquer l'objet en utilisant .dup cependant.

Autres conseils

Les classes sont des types de référence, donc quand vous avez

Object o;

o est une référence à un Object plutôt qu'un réel Object, donc le copier copie simplement la référence.C'est comme avec les pointeurs.

auto a = new int;
*a = 5;

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

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

Je conseillerais de lire soit Le langage de programmation D d'Andrei Alexandrescu, ou celui d'Ali Çehreli Tutoriel sur le langage de programmation D.En particulier, ce chapitre du livre d'Ali traite des cours, y compris comment les attribuer et les copier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top