Будут ли объекты копироваться в присвоении в D?
-
21-12-2019 - |
Вопрос
Когда я назначаю объект в 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 обсуждает занятия, в том числе как назначить иСкопируйте их.
Не связан с StackOverflow