هل سيتم نسخ الكائنات في المهمة في 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
هي إشارة إلى Object
بدلا من الفعلية Object
, ، لذا فإن نسخه ينسخ المرجع فقط.انها مجرد مثل مع المؤشرات.
auto a = new int;
*a = 5;
auto b = a;
assert(a is b);
assert(*a == *b);
*b = 5;
assert(*a == 5);
وأنصح بالقراءة أيضًا لغة البرمجة D بواسطة أندريه ألكسندريسكو، أو علي شيريلي د دروس لغة البرمجة.بخاصة، هذا الفصل من كتاب علي يناقش الفصول الدراسية، بما في ذلك كيفية تعيينها ونسخها.
لا تنتمي إلى StackOverflow