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?)
    }
}
Foi útil?

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