Вопрос

Когда я назначаю объект в D, будет скопирован?

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?)
    }
}
.

Это было полезно?

Решение

Только ссылка скопирована, сам объект не дублируется.Вы можете явно продублировать объект, используя .dup, хотя.

Другие советы

Классы - это ссылочные типы, поэтому, когда у вас есть

Object o;
.

o - это ссылка на генеракодицетагкод, а не фактический генеракодицетагкод, поэтому копирование его, просто копирует ссылку.Это просто как с указателями.

auto a = new int;
*a = 5;

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

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

Я бы посоветовал чтению либо читать либо Язык программирования D Andrei Alexandrescu,Или Ali çehreli's Упрашивание языка программирования D .В частности, Эта глава книги Ali обсуждает занятия, в том числе как назначить иСкопируйте их.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top