Os objetos serão copiados na atribuição em D?
-
21-12-2019 - |
Pergunta
Quando eu atribuir um objeto em D, ele será copiado?
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?)
}
}
Solução
Apenas a referência é copiada, o objeto em si não é duplicado.Você pode duplicar explicitamente o objeto usando .dup
no entanto.
Outras dicas
Classes são tipos de referência, então quando você tiver
Object o;
o
é uma referência a um Object
em vez de um verdadeiro Object
, então copiá-lo apenas copia a referência.É como acontece com os ponteiros.
auto a = new int;
*a = 5;
auto b = a;
assert(a is b);
assert(*a == *b);
*b = 5;
assert(*a == 5);
Eu aconselharia a leitura também A linguagem de programação D por Andrei Alexandrescu, ou Ali Çehreli Tutorial de linguagem de programação D.Em particular, este capítulo do livro de Ali discute classes, incluindo como atribuí-las e copiá-las.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow