Les objets seront-ils copiés dans l'affectation en D ?
-
21-12-2019 - |
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?)
}
}
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